我在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)