如何将指针从unique_ptr传递到另一个对象并管理寿命



我确信有一种标准的方法可以解决这个问题,但我找不到。

我有一个Processor类,它管理所有对象的寿命。CCD_ 2可以偶尔被分配给CCD_ 3。但是Bar需要知道Foo何时不再可用(已被Processor移除(。实现这一目标的正确方法是什么?

class Processor {
private:
vector<unique_ptr<Foo>> foos;
vector<unique_ptr<Bar>> bars;
};
class Bar {
public:
void AssignFoo(Foo* foo){ cur_foo = foo; }
private:
Foo* cur_foo = nullptr;
};

我能想到的一个选项是在Processor中有一个map,它可以跟踪分配,在Bar中也有一个函数RemoveFoo,但我想知道是否还有其他方法。

一种方法是使用std::shared_ptrstd::weak_ptr:

class Processor {
private:
vector<std::shared_ptr<Foo>> foos;
vector<std::unique_ptr<Bar>> bars;
};
class Bar {
public:
void AssignFoo(const std::weak_ptr<Foo>& foo){ cur_foo = foo; }
private:
bool FooIsValid() const {
return !cur_foo.expired();
}  
std::weak_ptr<Foo> cur_foo;
};

编辑:早些时候尝试使用unique_ptr和原始指针,但从一开始就错了,所以我删除了它。

最新更新