我有一个关于 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;
}
所以基本上 A
类拥有指向 B
类型对象的指针,并且有一个方法可以返回此指针。如果我创建 getter,我假设其他一些类可以访问这个指针,因此它应该是 shared_ptr
而不是 unique_ptr
。我是对的,还是我还不明白?
最佳答案
简短回答:取决于。
这取决于getB
返回的指针是否当拥有 A 超出范围时,可能会在某处存储/使用。区别在于所有权而不是你有多少指针。
- 如果使用
getB
的结果时 A 仍然存在,您可以存储一个unique_ptr
并返回一个普通指针(如果getB
永远无法返回nullptr
,则返回一个引用)。这表示“A 拥有 B,而没有其他人拥有”。 - 如果 A 在您使用/保存
getB
的结果时可能超出范围,但 B 应该与 A 一起(或不久之后)超出范围,存储 ashared_ptr
并返回weak_ptr
. - 如果可能有很多对象,包括
getB
的调用者,可以坚持B,没有明确的单主,囤货返回shared_ptr
s.
关于c++ - 我应该使用 shared_ptr 还是 unique_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14871640/