首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候定义复制构造函数最好?

什么时候定义复制构造函数最好?
EN

Stack Overflow用户
提问于 2014-07-16 17:12:33
回答 1查看 92关注 0票数 0

我刚接触C++,有人问我一个我真的不能回答的问题:什么时候在C++中重载或定义自己的复制构造函数是最佳时机?

EN

回答 1

Stack Overflow用户

发布于 2014-07-16 17:14:51

如果您的实例需要深度复制,那么您必须定义复制构造函数。复制构造函数只执行浅层复制。例如,如果您的类有一个char指针。

请参见此代码示例。

代码语言:javascript
复制
#include <iostream>
using namespace std;

class Student
{
public:
    char * m_name;
    int m_age;
    Student(char* name, int age){
        int name_len = strlen(name)+1;
        m_name= new char[name_len];
        strncpy(m_name, name, name_len);
        m_age = age;
    }
};

int main()
{
    char* firstStudent = "Kevin stefan";
    Student kevin(firstStudent,1);

    Student jhon = kevin;
    char* secondStudent = "Jhon Mac";
    strncpy(jhon.m_name,secondStudent,strlen(secondStudent));

    cout << kevin.m_name << endl;

    system("pause");
    return 0;
}

此程序的结果将打印Jhon Macefan。由于浅拷贝,两个Student实例指向相同的内存位置。

在这种情况下,您必须为深度复制定义一个copy constructor,如下所示

代码语言:javascript
复制
Student::Student(const Student& stu)

    {
        int name_len = strlen(stu.m_name);    
        m_name = new char[name_len+1];
        strncpy(m_name, stu.m_name, name_len);

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

https://stackoverflow.com/questions/24776765

复制
相关文章

相似问题

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