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

Pla*_*ove 5 c++ c++11

我敢肯定有解决此问题的标准方法,但我找不到。

我有一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)

我能想到的一种选择是有一个mapProcessor其跟踪的分配,并有功能RemoveFooBar,但我不知道是否有任何其他方式。

bar*_*top 5

一种方法是使用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;
};
Run Code Online (Sandbox Code Playgroud)

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