假设我有一个类,其中唯一的数据成员类似于std::string
或std::vector
。是否需要提供复制构造函数、析构函数和赋值运算符?
发布于 2010-03-05 19:19:52
如果您的类只包含向量/字符串对象作为其数据成员,则不需要实现这些对象。C++类(如向量、字符串)有自己的复制函数、重载赋值运算符和析构函数。
但是,如果您的类在构造函数中动态分配内存,那么简单的浅拷贝将导致问题。在这种情况下,您必须实现复制ctor、重载赋值运算符和析构函数。
发布于 2010-03-05 19:18:39
通常的经验法则是:如果你需要它们中的一个,那么你需要它们全部。
然而,并不是所有的类都需要它们。如果您的类没有任何资源(最值得注意的是内存),那么没有它们也没问题。例如,只有一个string
或vector
构成的类并不真正需要它们--除非您需要一些特殊的复制行为(默认情况下只复制成员)。
发布于 2010-03-05 19:19:17
如果向量是由value声明的,那么默认的复制构造函数将复制它。注意,如果你在向量中存储了指针,在这种情况下,你需要为复制/分配/销毁提供特定的行为,以避免内存泄漏或多次删除。
https://stackoverflow.com/questions/2386231
复制相似问题