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

When is it best to define a copy constructor

本文关键字:复制 构造函数 定义 什么时候      更新时间:2023-10-16

我是c++的新手,我被问到一个我真的无法回答的问题:在c++中重载或定义自己的复制构造函数的最佳时机是什么时候?

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

请看这个代码示例。

#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,像这样

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;  
    }