在现代C++中,我该如何管理无主指针?
我认为可以使用类似于unique_ptr的weak_ptr,但是好像并不存在。
例如,如果我有一个拥有指针的类A,我应该使用unique_ptr而不是旧的X*指针。
我认为可以使用类似于unique_ptr的weak_ptr,但是好像并不存在。
例如,如果我有一个拥有指针的类A,我应该使用unique_ptr而不是旧的X*指针。
class A
{
std::unique_ptr<X> _myX;
};
但是如果我有另一个使用该指针的类B
,我该怎么做呢?对于C风格的指针,我会这样做:
class B
{
X* _someX;
};
看起来代码没问题,但并不明显我引用了另一个对象的指针(例如一个读者可能会认为我可以不使用智能指针)。
我的考虑如下
std::shared_ptr<X>
- 由于A
保证能够比B
生存得更久,因此似乎浪费了引用计数。std::weak_ptr<X>
- 只能与shared_ptr
一起使用。X&
- 仅当X&在B的构造函数中可用时才有效。
这似乎是一个显而易见的问题,如果已经有人问过了,请原谅。我找到了这个问题,但不幸的是OP只问了一个特定情况下是否可以使用X*。我想知道我应该通常做些什么,而不是使用X*(如果有任何其他选择的话!)。
B
携带一个原始指针,这表明你不能管理该对象的内存。 - Cory Kramerobserver_ptr
,尽管有些东西使用别名,有些则使用单独的类型)。 - chris