我刚接触C++,有人问我一个我真的不能回答的问题:什么时候在C++中重载或定义自己的复制构造函数是最佳时机?
发布于 2014-07-16 17:14:51
如果您的实例需要深度复制,那么您必须定义复制构造函数。复制构造函数只执行浅层复制。例如,如果您的类有一个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;
}https://stackoverflow.com/questions/24776765
复制相似问题