dzi*_*wna 25 c++ smart-pointers shared-ptr unique-ptr c++11
我有一个关于std::unique_ptr
和的问题std::shared_ptr
.我知道有很多关于何时使用哪一个的问题,但我仍然不确定我是否正确理解它.我在某处读到了智能指针的默认选择std::unique_ptr
,但据我了解,我应该更喜欢使用std::shared_ptr
.例如,我有:
class B;
class A
{
private:
B* b;
public:
B* getB();
};
A::getB()
{
return b;
}
Run Code Online (Sandbox Code Playgroud)
所以基本上类A
拥有指向类型对象的指针,B
并且有一个返回该指针的方法.如果我创建了getter,我假设其他一些类可以访问这个指针,因此它应该shared_ptr
代替unique_ptr
.我是对的,还是我还没有得到它?
Arn*_*rtz 24
简答:取决于.
这取决于返回的指针是否getB
可以在拥有A超出范围时存储/使用.不同之处在于所有权不是关于你有多少指针.
getB
,则可以存储unique_ptr
并返回普通指针(如果getB
永远不能返回,则返回引用nullptr
).这表示"A拥有B,没有其他人做".getB
,但是B应该与A一起(或在A之后不久)超出范围,则存储shared_ptr
并返回a weak_ptr
.getB
)可以抓住B并且没有明确的单一所有者,则存储和返回shared_ptr
.让我们假设为了示例,确实需要一个指针并且只是B b;
不切割它(例如,B可能是多态的).
所以,A是B 的所有者.
private:
std::unique_ptr<B> b;
Run Code Online (Sandbox Code Playgroud)
并getB
提供了B的视图.
public:
B& getB();
B& A::getB()
{
return *b;
}
Run Code Online (Sandbox Code Playgroud)
A是的一个一个B.业主
private:
std::shared_ptr<B> b;
Run Code Online (Sandbox Code Playgroud)
A可以将B的所有权归给他人.
public:
std::shared_ptr<B> getB();
std::shared_ptr<B> A::getB()
{
return b;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16164 次 |
最近记录: |