拷贝构造函数
只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用
特征
- 拷贝构造函数是构造函数的一个重载形式
- 拷贝构造函数的参数只有一个且必须使用引用传参,使用传值方式会引发无穷递归调用
- 若未显示定义,系统生成默认的拷贝构造函数。 默认的拷贝构造函数对象按内存存储按字节序完成拷贝,这种拷贝我们叫做浅拷贝(值拷贝),有时候会有问题
class Date
{
public:
Date(const Date& d) // 拷贝构造函数,参数为一个,必须用引用
{
_year = d._year;
_month = d._month;
_day = d._day;
}
private:
int _year;
int _month;
int _day;
};
浅拷贝的问题
class String
{
public:
String(const char* str = "jack")
{
_str = (char*)malloc(strlen(str) + 1);
strcpy(_str, str);
}
~String()
{
cout << "~String()" << endl;
free(_str);
}
private:
char* _str;
};
int main()
{
String s1("hello");
String s2(s1);
}

s2是s1的拷贝,s2先析构,释放了“hello”的内存,之后s1析构的时候二次释放了内存
拷贝构造函数详解
本文深入探讨了拷贝构造函数的概念及其在C++中的应用。解释了拷贝构造函数的特征,包括其如何通过引用接收参数,以及在未显式定义时系统如何生成默认拷贝构造函数。此外,还讨论了浅拷贝的问题,并通过具体实例说明了深拷贝的必要性。
46万+

被折叠的 条评论
为什么被折叠?



