小编Mat*_*ers的帖子

只与一个所有者建立一个shared_ptr

我在C++ 11中有一个只有一个所有者的对象.但是,其他对象可以保存weak_ptr到此对象.这样,我可以在使用之前测试对象是否仍然存在.

现在,所有者拥有一个shared_ptr对象,其所有者的计数始终为1.

如何确保不允许任何人复制此内容shared_ptr

我不能使用a,unique_ptr因为显然C++ 11不允许使用weak_ptra unique_ptr.

编辑:谢谢你的回复!

所有程序都在一个线程上运行.主要拥有一个定期更新循环,在其中调用其所有子系统.

感谢您指出使用weak_ptr实际创建一个shared_ptr.期望shared_ptr在调用另一个非const函数期间不允许子系统或对象存储a .这样,任何函数都可以要求所有者从其集合中删除对象,并立即删除该对象.

我希望避免shared_ptr每次子系统调用时增加引用计数的开销lock(),因为它应该立即释放所有权(并确保在编译时就是这种情况.)

编辑2:更清楚地表达我的问题的示例代码

class Manager {
  public:
    Manager();           //Creates objects and stuff
    void updateAllObjects() {
      for (auto& o : mObjects)
        o->update(*this);
    }
    void deleteObject(weak_ptr<WorldObject>);    //May be called by other objects
    vector<shared_ptr<WorldObject>> mObjects;
};

class WorldObject {
  public:
    virtual void update(Manager&)=0;
};

class Passenger : public WorldObject { …
Run Code Online (Sandbox Code Playgroud)

c++ smart-pointers c++11

1
推荐指数
1
解决办法
540
查看次数

标签 统计

c++ ×1

c++11 ×1

smart-pointers ×1