bba*_*hev 1 c++ stl shared-ptr weak-ptr c++11
我最近一直在阅读有关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
在将来使用,我必须返回并用常规替换make函数std::shared_ptr<Class>(new Class())
.
这是一个微不足道的边缘问题,不成比例.这是一个问题的唯一情况是,如果对象很大(相对于可用内存),则大小是对象的基本大小(而不是析构函数(对象或其任何成员)可以释放的内存),弱指针可能会显着超过对象.这是一种罕见的案例组合,几乎从不重要.
归档时间: |
|
查看次数: |
712 次 |
最近记录: |