0

对于内部具有子类或结构的类,重置它的最优雅的方法是什么?

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();
   }

其他优雅的建议?

4

1 回答 1

2

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

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

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

于 2012-10-15T18:25:23.503 回答