私はクラスを持っていMyObject
ます。そのすべてのインスタンスは によって所有されるべきでMyObjectSet
あり、それを他の場所に構築することはできません。内部では、すべてのインスタンスを格納MyObjectSet
するために a を使用しています。std::vector<MyObject>
問題は、 forstd::vector<MyObject>
が動作するためには、 のムーブ コンストラクターが public でなければならないことです (のフレンドとして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
が、可能であれば避けたいと思います。