我最近一直在阅读有关std::make_shared
功能的文章。据我了解Effective Modern C++
,make函数应该是首选,除非:
std::weak_ptr
可能会过期std::shared_ptr
,处理大对象,自定义删除器等。因此,我了解std::make_shared
只需一个调用即可在堆及其控制块上分配一个对象。因此,问题是std::shared_ptr
在必须释放控制块之前,可能无法删除对象。如果我错了,请纠正我,但这是最后一次std::weak_ptr
发布的时间。因此,std::make_shared
如果有一个活着的人可能并不适合std::weak_ptr
。
但这对于大多数对象仍然是一个问题吗?我们是否需要关心何时为非大对象释放控制块?可以说,如今的内存并不难获得,这是否仅对于大型对象和低内存系统而言才是问题所在?
我关心的问题是:如果我设计一个使用std::make_shared
并std::weak_ptr
在将来使用的类,那么我必须返回并用一个regular替换make函数std::shared_ptr<Class>(new Class())
。
这是一个微小的边缘问题,不合比例。唯一有问题的情况是,如果对象很大(相对于可用内存),则其大小是对象的基本大小(不是析构函数(对象或其任何成员)可以释放的内存) ),并且弱指针可能会大大延长对象的寿命。这是一种罕见的案例组合,几乎没有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句