我有一个std::unique_ptr
和另一个原始指针。我希望原始指针指向unique_ptr
没有任何所有权的内容。它是只读关系:
auto bar=std::make_unique<foo>();
auto ptr=bar.get();// This may point to another value later
这很糟糕吗?有没有其他选择?
注意:真实的例子更复杂。他们不在同一个班级。
我有一个std::unique_ptr
和另一个原始指针。我希望原始指针指向unique_ptr
没有任何所有权的内容。它是只读关系:
auto bar=std::make_unique<foo>();
auto ptr=bar.get();// This may point to another value later
这很糟糕吗?有没有其他选择?
注意:真实的例子更复杂。他们不在同一个班级。
不,这还不错,并且在标准库合并提议std::observer_ptr
的 之前,这是表达非拥有观察者的惯用方式。
如果您可以保证A) bar
的生命周期将超过ptr
, 和B)的生命周期,并且在任何时候都不会编写任何程序员/重构delete ptr;
,那么这非常好,并且对于您需要传递指针的任何情况都可能是理想的所有权。
如果不能保证这两个条件,您可能应该使用std::shared_ptr
and std::weak_ptr
。