2016-10-08 3 views
2

私は2つのクラスがあります。つまり、NonCopyableクラスには触れないでくださいが、Derivedクラスは、新規に初期化されたかのように変更する必要があります。再初期化のすべてのメンバ変数は

この目標を達成する最も簡単な方法は何ですか?私は、各メンバ変数を手動で再初期化するメンバ関数を作成しないようにしようとしています。明らかに


、私は次のようなアプローチを使用することはできません:コピーコンストラクタがコピー不可クラスとそれがコピー不可のメンバ変数を変更するという事実から削除されているので

Derived d; 
// [...] many changes to d 
d = Derived(); 

をこれは当てはまりませんでした。

答えて

4

あなたが別の集計にあなたの個人データを移動する場合、それははるかに容易になる:

struct DerivedData { 
    std::vector<int> numbers; 
    float f = 5.0; 
    int* ptr = nullptr; 
}; 

class Derived : public NonCopyable { 
    DerivedData data; 
public: 
    ~Derived(); 
    void reset() { data = DerivedData(); } 
}; 
関連する問題