lea*_*vst 62 c++ smart-pointers unique-ptr c++11
鉴于自有对象的生命周期与其所有者链接的常见情况,我可以使用两种方式之一的唯一指针..
它可以分配:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned=std::unique_ptr<someObject>(new someObject());
}
};
Run Code Online (Sandbox Code Playgroud)
可以使用重置方法:
class owner
{
std::unique_ptr<someObject> owned;
public:
owner()
{
owned.reset(new someObject());
}
};
Run Code Online (Sandbox Code Playgroud)
为了最佳实践,我应该更喜欢一种形式吗?
编辑:对不起伙计们.我简化了这个.堆分配发生在初始化方法中,而不是在ctor中.因此,我无法使用初始化列表.
Kos*_*Kos 40
将r指向的对象的所有权转移给*,就好像通过调用
reset(r.release())
后跟一个赋值一样std::forward<E>(r.get_deleter())
.
而你所需要的reset
只是通话,所以直接调用就更简单了
fil*_*mor 15
执行此操作的正确方法(您没有列出)是使用以下构造函数owned
:
owner() : owned(new someObject())
{}
Run Code Online (Sandbox Code Playgroud)
除此之外,我更喜欢,reset
因为在这种情况下你不会创建一个无用的中间实例(即使机器级别可能没有差异,因为优化器可以在那里做很多事情).
归档时间: |
|
查看次数: |
41142 次 |
最近记录: |