我有一个std::unique_ptr
和另一个原始指针。我希望原始指针指向unique_ptr
的内容而没有任何所有权。它是只读关系:
auto bar=std::make_unique<foo>();
auto ptr=bar.get();// This may point to another value later
这不好吗?还有其他选择吗?
注意:真实的例子比较复杂。他们不属于同一类。
答案 0 :(得分:27)
不,它不错,直到标准库包含proposed std::observer_ptr
,它是 表达非拥有观察者的惯用方式。< / p>
答案 1 :(得分:26)
如果你可以保证 A) bar
的生命周期超过ptr
的生命周期,并且 B)那么没有程序员/重构将在任何时候写delete ptr;
,然后这是完全正常的,并且可能适用于需要在没有所有权的情况下传递指针的任何情况。
如果无法保证这两个条件,您应该使用std::shared_ptr
和std::weak_ptr
。