C++默认移动构造函数有什么样用?allocator类重复使用成员函数allocator如何分配内存

发表时间:2017-12-29 02:12:01 作者: 来源: 浏览:

在上一篇文章中,小编为您详细介绍了关于《为什么样很多 Android 程序喜欢在存储卡根目录建文件夹来存储数据而不是 Android/data 目录下?Android 系统不释放内存么》相关知识。本篇中小编将再为您讲解标题C++默认移动构造函数有什么样用?allocator类重复使用成员函数allocator如何分配内存。

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对象并没有①片内存的所有权。

编后语:关于《C++默认移动构造函数有什么样用?allocator类重复使用成员函数allocator如何分配内存》关于知识就介绍到这里,希望本站内容能让您有所收获,如有疑问可跟帖留言,值班小编第一时间回复。 下一篇内容是有关《郑州的环保节能做的有多好?戴尔Inspiron 560s小机箱 屏幕经常卡主不动5》,感兴趣的同学可以点击进去看看。

资源转载网络,如有侵权联系删除。

相关资讯推荐

相关应用推荐

玩家点评

条评论

热门下载

  • 手机网游
  • 手机软件

热点资讯

  • 最新话题