我有一个关于在原始ptr上使用shared_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 更好吗?
如果您需要管理指针的所有权,根据经验,始终更喜欢unique_ptr
而不是原始指针。如果你有原因(即如果你共享所有权,而不是一次与一个所有者转让所有权)更喜欢shared_ptr
而不是原始指针。
如果需要使用指针但不管理其生存期,请使用shared_ptr
进行管理,weak_ptr
使用指针而不进行生存期管理。
不过,您可能会发现原始指针的一些用例,例如在帮助程序函数中,需要格外小心,以免意外生成悬空指针。