最优雅的方式来重置一个类

时间:2012-10-15 18:21:52

标签: c++

对于内部具有子类或结构的类,重采它的最简单方法是什么?

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

什么是循环中最优雅的,默认运算符= ou创建一个重置方法,记住0结构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();
   }

其他优雅的建议?

1 个答案:

答案 0 :(得分:2)

这完全取决于手头的课程。通常,正确的做法是从头开始创建一个新的或使用类的复制构造函数,但如果它使用昂贵的资源,例如打开IMAP连接(这个例子让我想到,因为IMAP服务器通常会严格限制每个用户允许的连接数),这可能会产生非常不必要的副作用。

如果一个类没有零参数构造函数,那么将它“重置”到某个默认状态就没什么意义了,所以你也需要考虑它。

如果您确实需要保留有意义的中间状态,请考虑Memento设计模式。