繁体   English   中英

std :: shared_ptr,std :: weak_ptr和控制块

[英]std::shared_ptr, std::weak_ptr and control block

我最近一直在阅读有关std::make_shared函数的信息。 据我从《 Effective Modern C++书中了解到,make函数应该是首选,除非:

  1. 自定义内存管理到位。
  2. 存在内存方面的问题,例如std::weak_ptr可能会超过其std::shared_ptr ,处理大型对象,自定义删除器等。

因此,我了解std::make_shared仅通过一次调用就可以在堆及其控制块上分配一个对象。 因此,问题是std::shared_ptr的对象直到必须释放控制块才可能被删除。 如果我错了,请纠正我,但这是在最后一个std::weak_ptr发布时。 因此,如果有一个指向它的活的std::weak_ptrstd::make_shared可能不合适。

但这对于大多数对象还是个问题吗? 我们是否需要关心何时为非大对象释放控制块? 可以说,如今内存并不难获得,这是否仅对于大型对象和低内存系统而言才是问题?

我关心的问题是:如果我设计一个使用std::make_shared的类,并且将来使用std::weak_ptr ,我必须返回并用常规的std::shared_ptr<Class>(new Class())替换make函数。 std::shared_ptr<Class>(new Class())

这是一个微小的边缘问题,不合比例。 唯一有问题的情况是,如果对象很大(相对于可用内存),则大小在对象的基本大小(不是析构函数(对象或其任何成员)可以释放的内存中) ),并且弱指针可能会大大延长对象的寿命。 这是一种罕见的案例组合,几乎没有意义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM