c++ - 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更好吗?
解决方案
如果您需要管理指针的所有权,根据经验,总是更喜欢unique_ptr
原始指针。而且,如果您有原因(即,如果您共享所有权,而不是一次与单个所有者转让所有权),则更喜欢shared_ptr
原始指针。
如果您需要使用指针但不管理其生命周期,则使用shared_ptr
进行管理和weak_ptr
使用没有生命周期管理的指针。
您仍然可能会发现一些原始指针的用例,例如在辅助函数中,这些用例需要格外小心,以免意外生成悬空指针。
推荐阅读
- java - 启动 Quarkus
- php - 在 Heroku 上部署我的 PHP 应用程序的问题
- regex - 正则表达式:如何匹配 2 个或更多日期中的第二个
- windows - 如何使用win32 api在windows中进行高级搜索?
- c# - Type into console core azure app and give access to that app to end users
- python-3.x - pandas:附加一个带有分位数值的列
- android - 颤振复选框在无状态小部件中不起作用
- java - Can't change JTable Header background color
- javascript - Javascript optimizing the repetitive JSON object to output below
- django - How I can show the latest post at the top in Django template using example.example_set.all