烽云社区

 找回密码
 立即注册
搜索
热搜: 烽火
查看: 2066|回复: 2

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

[复制链接]

4

主题

10

帖子

32

积分

新手上路

Rank: 1

积分
32
发表于 2018-12-10 16:41:19 | 显示全部楼层 |阅读模式
之前自己写的类观察输出,是先调用默认构造函数,再调用operator=的。
但是在用模板写自己的vector的pop_back时发现不对
1
2
3
4
5
6
7
template<typename T>
void MyVec<T>::pop_back()
{
    if (empty()) return;
    *(end()-1) = T();
    --sz;
}




当我使用自己定义的string时,MyVec<String>,就会检测到memory leak,因为只调用了默认构造函数,没有调用T的operator=,导致没有调用原来元素的析构函数,改成下面这样就没问题了。
1
2
T temp;
*(end()-1) = temp;




这是为什么啊?
回复

使用道具 举报

0

主题

5

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2018-12-10 16:41:35 | 显示全部楼层
T()明显是个右值啊
回复

使用道具 举报

3

主题

11

帖子

35

积分

新手上路

Rank: 1

积分
35
发表于 2018-12-10 16:41:57 | 显示全部楼层
定义了移动赋值运算符,这里面忘了析构。。。
看来t=T()会优先调用移动移动赋值运算符啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|烽云社区

GMT+8, 2019-12-6 16:09 , Processed in 0.085173 second(s), 5 queries , File On.

快速回复 返回顶部 返回列表