首页 > 解决方案 > C++:在原始 ptr 上使用 shared_ptr<...>

问题描述

我有一个关于使用shared_ptr<...>over raw ptr 的问题。考虑以下示例:

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

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

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

标签: c++c++11smart-pointers

解决方案


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

如果您需要使用指针但不管理其生命周期,则使用shared_ptr进行管理和weak_ptr使用没有生命周期管理的指针。

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


推荐阅读