一个控制块shared_ptr
当至少有一个时保持存活weak_ptr
展示。如果共享指针是用以下命令创建的make_shared
这意味着对象的整个内存都保持分配状态。 (对象本身被正确破坏,但由于对象的控制块和内存被分配在一个块中,如make_shared
确实如此,它们只能一起释放。)
我的理解正确吗?
似乎这种行为代表了一个问题,例如在著名的“缓存示例” https://channel9.msdn.com/Events/GoingNative/2013/My-Favorite-Cpp-10-Liner。对象的内存将永远保持分配状态。
在任何实际情况下这都是一个问题吗?应shared_ptr
在这种情况下使用构造函数创建(大对象和意图使用weak_ptr
s)?
我的理解正确吗?
是的。如果你的weak_ptr
s 的寿命明显超过(大)对象,并且内存紧张,避免使用可能会有所帮助make_shared
.
然而,这里的“大”是用sizeof
,以及许多概念上的“大”对象(例如,大多数标准容器,除了std::array
)按照该指标来说相当小,因为它们分配额外的内存来存储其内容,一旦对象被销毁,这些内存就会被释放。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)