0

内部にサブクラスまたは構造を持つクラスの場合、それをリセットする最もエレガントな方法は何ですか?

class attributes {
public:
   std::string address;
   short       port;
   std::vector< std::string > data;
   struct Foo foo;
};

ループの中で最もエレガントなものは何ですか? デフォルトの演算子 = 構造体を記憶する Reset メソッドを作成しますmemset(...)か?

   attributes obj, originalStateToResetObj;
   for(;;)
      //do stuff with obj
      obj.address = "172.0.0.1"
      //etc
      //reseting obj using operator=
      obj = originalStateToResetObj;
      // OR using Reset?
      obj.Reset();
   }

他のエレガントな提案は?

4

1 に答える 1

2

これは、当面のクラスに完全に依存します。一般的に正しいことは、ゼロから新しいものを作成するか、クラスのコピー コンストラクターを使用することですが、IMAP 接続を開くなど、高価なリソースを使用している場合はユーザーは非常に厳密に)、これには非常に望ましくない副作用が生じる可能性があります。

クラスに引数のないコンストラクターがない場合、それをデフォルトの状態に「リセット」することはほとんど意味がないため、それも考慮する必要があります。

保持する必要がある意味のある中間状態がある場合は、Memento デザイン パターンを検討してください。

于 2012-10-15T18:25:23.503 に答える