模板中如何调用析构函数?

加盾男爵 2020-10-29 04:38:41
比如

templace<typename T>
struct People{
T info;
People* last;
People* next;
People() = default;
~People() default;
};


对于这样一个结构,在另一个类中用于储存数据,然后该类有个remove函数移除某个索引的数据

template<typename T>
class PeopleList{
private:
People<T>* allPeople;
//....
public:
void remove(std::size_t index);
};
template<typename T>
void PeopleList<T>::remove(std::size_t index){
People<T>* tmp = allPeople;;
std::size_t currentIndex = 0;
while(currentIndex != (index - 1)){
tmp = tmp->last;
++currentIndex;
}

tmp->T::~T();//??如何调用People的析构函数
delete tmp;
}

对于由多个People组成的链表,我要删除其中的某个元素,要做2步
1.调用People的析构函数,因为People里的info可能跟也申请了内存
2.删除People所在的内存

那如何调用People的析构函数
...全文
439 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-09
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html
yshuise 2020-10-29
  • 打赏
  • 举报
回复
这有什么难的?
PeopleList里删除allPeople



tmp->T::~T();//这是错误代码,不需要。delete自动会这样调用
delete tmp;
真相重于对错 2020-10-29
  • 打赏
  • 举报
回复
直接delete就可以了 delete tmp时候会自动调用tmp的析构函数,而在tmp的析构函数中删除tmp所包含的内存
Minikinfish 2020-10-29
  • 打赏
  • 举报
回复
C语言已经有malloc与free,C++为啥需要new delete呢? 就是因为new 自动调用构造函数,delete自动调用析构函数。 delete tmp,自动调用~People析构函数,不用显示调用 如果使用了place new,需要显示调用构造函数与析构函数 例如 BYTE* pb = new BYTE[sizeof(std::string)]; ((std::string*)pb)->std::basic_string<char, std::char_traits<char>, std::allocator<char>>::basic_string(); ((std::string*)pb)->std::basic_string<char, std::char_traits<char>, std::allocator<char>>::~basic_string(); 模板真的要调用析构函数(上面的例子已经给出std::string模板例子) tmp->People<T>::~People();

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧