我有课MyObject
。它的所有实例都应该由 a 拥有MyObjectSet
,并且不能在其他任何地方构造它。在里面MyObjectSet
,我使用 astd::vector<MyObject>
来存储所有实例。
问题是,std::vector<MyObject>
为了工作,移动构造函数必须是公共的(添加为 的朋友MyObject
是不够的)。std::vector<MyObject>
MyObject
class MyObject {
MyObject(int n);
friend class MyObjectSet;
public:
MyObject(MyObject&&) = default; // without this, it doesn't compile
};
class MyObjectSet {
std::vector<MyObject> MyObjects;
public:
MyObject& GetMyObject(int some_param);
};
但是,如果我将其公开,则可以MyObject
从其他地方实例化。
void SomeUnrelatedFunc(MyObjectSet& set) {
MyObject m(std::move(set.GetMyObject(0))); // this shouldn't be possible
}
有没有办法解决这个问题?
可以在内部存储指向MyObject
实例的指针MyObjectSet
,但如果可能的话,我想避免这种情况。