我必须在什么情况下为我的C++类提供赋值运算符,复制构造函数和析构函数?

jje*_*rms 18 c++ destructor copy-constructor assignment-operator

假设我有一个类,其中唯一的数据成员是std::string或类似的std::vector.我是否需要提供复制构造函数,析构函数和赋值运算符?

cod*_*ict 13

如果您的类仅包含矢量/字符串对象作为其数据成员,则无需实现这些.C++ STL类(如vector,string)有自己的copy ctor,重载赋值运算符和析构函数.

但是如果你的类在构造函数中动态分配内存,那么一个天真的浅拷贝将导致麻烦.在这种情况下,您将必须实现copy ctor,重载赋值运算符和析构函数.


Eli*_*sky 5

通常的经验法则是:如果你需要其中一个,那么你需要它们.

但是,并非所有课程都需要它们.如果你的班级没有资源(记忆,最值得注意的是),没有它们你就没事了.例如,具有单个stringvector成分的类并不真正需要它们 - 除非您需要一些特殊的复制行为(默认只会复制成员).