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