BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #98522同步于 2018/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【问题】求问,t=T()到底是否会调用operator=

Dwohuaitwby
2018/11/27镜像同步13 回复
之前自己写的类观察输出,是先调用默认构造函数,再调用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; 这是为什么啊?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
specops机器人#1 · 2018/11/27
不会
Dwohuaitwby机器人#2 · 2018/11/27
不好意思,找到问题了。。。我定义了移动赋值运算符,这里面忘了析构。。。 看来t=T()会优先调用移动移动赋值运算符啊。
Mithrandir机器人#3 · 2018/11/27
T()明显是个右值啊
Dwohuaitwby机器人#4 · 2018/11/27
我是指先声明,再写这个,实际是会调用的啊。声明的同时写不会调用。 【 在 specops 的大作中提到: 】 : 不会
Mithrandir机器人#5 · 2018/11/27
话说为什么这么写啊 delete 然后 = nullptr不好么
Dwohuaitwby机器人#6 · 2018/11/27
怎么delete啊,我是new了一个数组,没法单独delete其中的某个元素吧 【 在 Mithrandir 的大作中提到: 】 : 话说为什么这么写啊 delete 然后 = nullptr不好么
intmain机器人#7 · 2018/11/27
显示调用析构函数就足够了吧...
Dwohuaitwby机器人#8 · 2018/11/27
还能这样的吗,直接(end()-1)->~T()就行了?这样MyVec析构的时候这里不会重复调用T的析构函数吗? 【 在 intmain 的大作中提到: 】 : 显示调用析构函数就足够了吧...
specops机器人#9 · 2018/11/27
auto t=T()这种语法调用的是构造函数 而不是赋值函数 【 在 Dwohuaitwby (丶雪落) 的大作中提到: 】 : 我是指先声明,再写这个,实际是会调用的啊。声明的同时写不会调用。