/自定义拷贝构造函数
classname(const classname &ob)
{
//自定义拷贝构造函数的函数体
}
// 其中ob是用来初始另一个对象的对象的引用
class StringData{
private: char *str;
public:
StringData(char *s){
str=new char[strlen(s)+1];
strcpy(str,s);
}
StringData(const StringData &p){
str=new char[strlen(p.str)+1];
strcpy(str,p.str);
}
~StringData() { delete str; }
//…
};
int main()
{
StringData x(“abc”);
StringData y(x);
}
拷贝构造函数是一种特殊的构造函数。它用于依据已存在的对象建立一个新对象。
如果一个对象里面有指针成员,并且这个指针已经动态分配空间了,同时,对象有析构函数对这个指针进行释放。如上面那个例子,如果我们通过这个对象创建一个新对象:
A a("123");
A b = a; // 调用拷贝构造函数
如果我们没有自定义拷贝构造函数,导致对象 a 和 b 的指针成员指向同一个地址空间,当对象生命周期结束时,a 和 b 都会调用析构函数,最后导致,这个指针会被释放 2 次,导致内存出问题。
所以,对象有指针成员,尽量自定义拷贝构造函数。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。