返回信息流之前自己写的类观察输出,是先调用默认构造函数,再调用operator=的。
但是在用模板写自己的vector的pop_back时发现不对
template<typename T>
void MyVec<T>::pop_back()
{
if (empty()) return;
*(end()-1) = T();
--sz;
}
当我使用自己定义的string时,MyVec<String>,就会检测到memory leak,因为只调用了默认构造函数,没有调用T的operator=,导致没有调用原来元素的析构函数,改成下面这样就没问题了。
T temp;
*(end()-1) = temp;
这是为什么啊?
这是一条镜像帖。来源:北邮人论坛 / cpp / #98522同步于 2018/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【问题】求问,t=T()到底是否会调用operator=
Dwohuaitwby
2018/11/27镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
怎么delete啊,我是new了一个数组,没法单独delete其中的某个元素吧
【 在 Mithrandir 的大作中提到: 】
: 话说为什么这么写啊 delete 然后 = nullptr不好么
还能这样的吗,直接(end()-1)->~T()就行了?这样MyVec析构的时候这里不会重复调用T的析构函数吗?
【 在 intmain 的大作中提到: 】
: 显示调用析构函数就足够了吧...
auto t=T()这种语法调用的是构造函数 而不是赋值函数
【 在 Dwohuaitwby (丶雪落) 的大作中提到: 】
: 我是指先声明,再写这个,实际是会调用的啊。声明的同时写不会调用。