首页 > 后端开发 > C++ > 正文

什么时候应该在 C 中实现用户定义的复制构造函数?

Mary-Kate Olsen
发布: 2024-10-23 17:49:49
原创
957 人浏览过

When Should You Implement a User-Defined Copy Constructor in C  ?

什么时候需要用户定义的复制构造函数?

C 编译器自动为类生成一个复制构造函数,该构造函数按成员方式执行默认复制。然而,在某些情况下,我们可能需要定义自己的用户定义的复制构造函数。

定义用户定义的复制构造函数的原因:

  • 深度复制:当类的成员变量分配需要单独复制的动态内存时,逐成员复制是不够的。在这种情况下,需要用户定义的复制构造函数来执行深度复制,这会为对象的成员变量创建动态内存的新副本。

示例:

考虑以下存储字符串的类:

<code class="cpp">class Class {
public:
    Class(const char* str);
    ~Class();
private:
    char* stored;
};</code>
登录后复制

使用默认的复制构造函数,存储的成员只能通过引用复制,当其中一个副本被复制时,会导致未定义的行为被毁了。为了防止这种情况,我们定义了一个执行深度复制的用户定义的复制构造函数:

<code class="cpp">Class::Class(const Class& another) {
    stored = new char[strlen(another.stored) + 1];
    strcpy(stored, another.stored);
}</code>
登录后复制

此外,赋值运算符也需要用户定义的复制构造函数才能正确执行深度复制:

<code class="cpp">void Class::operator = (const Class& another) {
    char* temp = new char[strlen(another.stored) + 1];
    strcpy(temp, another.stored);
    delete[] stored;
    stored = temp;
}</code>
登录后复制

以上是什么时候应该在 C 中实现用户定义的复制构造函数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!