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

How does `make_shared` avoid double allocation and allow `release` to prolong the lifetime of the managed object beyond that of the shared_pointer?

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

std::shared_ptr可以用std::make_shared构造,它可以将管理对象和shared_ptr控制块的两个分配合二为一。

release 是如何工作的?它允许被管理对象比共享指针长寿,但必须在共享指针的析构函数中删除控制块。如何处理销毁和重新分配?

您不能 release 来自 shared_ptr。它不起作用。没有该会员。

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