首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在什么情况下,我必须为我的C++类提供赋值运算符、复制构造函数和析构函数?

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

Stack Overflow用户
提问于 2010-03-05 19:10:55
回答 7查看 4.8K关注 0票数 20

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

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-03-05 19:19:52

如果您的类只包含向量/字符串对象作为其数据成员,则不需要实现这些对象。C++类(如向量、字符串)有自己的复制函数、重载赋值运算符和析构函数。

但是,如果您的类在构造函数中动态分配内存,那么简单的浅拷贝将导致问题。在这种情况下,您必须实现复制ctor、重载赋值运算符和析构函数。

票数 13
EN

Stack Overflow用户

发布于 2010-03-05 19:18:39

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

然而,并不是所有的类都需要它们。如果您的类没有任何资源(最值得注意的是内存),那么没有它们也没问题。例如,只有一个stringvector构成的类并不真正需要它们--除非您需要一些特殊的复制行为(默认情况下只复制成员)。

票数 5
EN

Stack Overflow用户

发布于 2010-03-05 19:19:17

如果向量是由value声明的,那么默认的复制构造函数将复制它。注意,如果你在向量中存储了指针,在这种情况下,你需要为复制/分配/销毁提供特定的行为,以避免内存泄漏或多次删除。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2386231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档