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星
用户评分:
发表评论

评论

  • 暂无评论信息