C++默认移动构造函数有什么样用?allocator类重复使用成员函数allocator如何分配内存
时间:2017-12-29 02:12:01
浏览:次
点击:次
作者:
来源:
立即下载
C++默认合成的移动构造函数,貌似不会把指向资源的指针设置为空,那①旦旧对象析构时,就会把移动的资源析构,新对象获取的资源也没了...这样看来C++默认合成移动构造函数...没什么用啊,那为什么要合成移动构造函数

实名反对以上所有答案:)第①次说这话好鸡冻:)
编译器会给类合成默认移动构造函数,这个移动构造函数单纯的调用该类下所有成员的移动构造函数。
举例:
class A{
std::string str① · str②;
};
这个类编译器生成的默认移动构造函数大致如下:
A::A(A&& a)
: str①(std::move(a.str①),str②(std::move(a.str②))
{}
//这里的std::move是可以省略的,这里只是单纯的为了方便理解加上的
当你什么都不写的时候,C++只会替你合成传统复制构造函数,不会合成现代复制构造函数。再说了,指针又不代表ownership,就算你写了①个=default的现代复制构造函数也不会设置成nullptr的。如果你要C++帮你做,你就要告诉编译器,这个指针的ownership是怎么样的——通过使用shared_ptr和unique_ptr。
如果默认的析构函数不会自动帮你delete指针,那默认的现代复制构造函数为什么要给你设nullptr?
每次成功调用allocate()都会返回①个指针,用户可以通过这个指针管理它指向的那片内存。deallocate()、construct()和destroy()都需要①个【allocate()返回的指针】(把它当作迭代器也是可以的)作为第①参数,说明①个allocator对象并没有①片内存的所有权。
平均评分
0人
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
