[英]std::shared_ptr, std::weak_ptr and control block
我最近一直在阅读有关std::make_shared
函数的信息。 据我从《 Effective Modern C++
书中了解到,make函数应该是首选,除非:
std::weak_ptr
可能会超过其std::shared_ptr
,处理大型对象,自定义删除器等。 因此,我了解std::make_shared
仅通过一次调用就可以在堆及其控制块上分配一个对象。 因此,问题是std::shared_ptr
的对象直到必须释放控制块才可能被删除。 如果我错了,请纠正我,但这是在最后一个std::weak_ptr
发布时。 因此,如果有一个指向它的活的std::weak_ptr
, std::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.