C++:使用 shared_ptr<...> 而不是原始 ptr



我有一个关于在原始ptr上使用shared_ptr<...>的问题。请考虑以下示例:

shared_ptr<BaseClass> someName = shares_ptr<Derived>(new Derived);
shared_ptr<BaseClass> someName1 = shares_ptr<Derived1>(new Derived1(someName));

在这里,Derived1shared_ptr<BaseClass>的实例作为其构造函数的输入。我使用shared_ptr主要是为了多态性。由于一个BaseClass实例可以用作多个其他Derived实例的输入,因此unique_ptr不是一个选项,因为我必须一直更改所有权。

但所有权是我在这里主要关心的问题。派生实例不拥有传递给构造函数的实例。通过原始 ptr 更好吗?

如果您需要管理指针的所有权,根据经验,始终更喜欢unique_ptr而不是原始指针。如果你有原因(即如果你共享所有权,而不是一次与一个所有者转让所有权)更喜欢shared_ptr而不是原始指针。

如果需要使用指针但不管理其生存期,请使用shared_ptr进行管理,weak_ptr使用指针而不进行生存期管理。

不过,您可能会发现原始指针的一些用例,例如在帮助程序函数中,需要格外小心,以免意外生成悬空指针。

相关内容

  • 没有找到相关文章

最新更新