`make_shared`如何避免双重分配并允许`release`来延长托管对象的生命周期,超出shared_pointer的生命周期?

时间:2016-02-16 22:41:32

标签: c++ c++11 shared-ptr c++-standard-library

std::shared_ptr可以用两个成员实现,一个指向托管资源的指针和一个指向控制块的指针。

std::shared_ptr可以使用std::make_shared构建,可以将托管对象和shared_ptr控制块的两个分配合并为一个。

release如何运作?它允许托管对象比共享指针更长,但必须在共享指针的析构函数中删除控制块。破坏和解除分配是如何处理的?

2 个答案:

答案 0 :(得分:4)

release你不能shared_ptr。它不起作用。没有这样的成员。

答案 1 :(得分:-1)

当调用shared_ptr析构函数时,共享的refCount会递减。当共享的refCount达到0时,该对象将被销毁。对于使用make_shared创建的对象,对象的空间在控制块中保持未使用状态。当弱refCount达到0时,空间将释放回堆中。