重置类的最优雅方式

Most elegant way to reset a class

本文关键字:方式      更新时间:2023-10-16

对于一个内部有子类或sctructures的类,最巧妙的重新设置方法是什么?

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

循环中最优雅的是什么,默认运算符=您创建了一个Reset方法来记忆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();
}

其他优雅的建议?

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

如果一个类没有零参数构造函数,那么将其"重置"为某个默认状态是没有意义的,所以您也需要考虑这一点。

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