我敢肯定有解决此问题的标准方法,但我找不到。
我有一Processor堂课,管理所有对象的寿命。Foo可能会Bar偶尔分配A。但是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;
};
Run Code Online (Sandbox Code Playgroud)
我能想到的一种选择是有一个map在Processor其跟踪的分配,并有功能RemoveFoo的Bar,但我不知道是否有任何其他方式。
一种方法是使用std::shared_ptr和std::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;
};
Run Code Online (Sandbox Code Playgroud)
编辑:尝试使用unique_ptr和原始指针,但从一开始就发现错误,所以我删除了它。
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |