关于拷贝构造函数的一个问题
来源:互联网 发布:系统优化的意义是 编辑:程序博客网 时间:2024/06/11 17:48
若程序员没有定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,可能会产生什么问题?
下面以示例说明
1、无拷贝复制构造函数
#include <iostream>
class MyClass
{
public:
MyClass(int a)
{
b=new int(a);
}
int *myGet()
{
return b;
}
protected:
private:
int *b;
};
int main()
{
MyClass class1(5);
MyClass class2(class1);
std::cout<<"class1.b="<<class1.myGet()<<" "<<"*b="<<*(class1.myGet())<<std::endl;
std::cout<<"class1.b="<<class2.myGet()<<" "<<"*b="<<*(class2.myGet())<<std::endl;
}
执行结果:
也就是两个对象的数据成员保存了同一个内存地址
2、有复制构造函数(深拷贝)
#include <iostream>
class MyClass
{
public:
MyClass(int a)
{
b=new int(a);
}
MyClass(const MyClass&class2)
{
b=new int(*(class2.b));
}
int *myGet()
{
return b;
}
protected:
private:
int *b;
};
int main()
{
MyClass class1(5);
MyClass class2(class1);
std::cout<<"class1.b="<<class1.myGet()<<" "<<"*b="<<*(class1.myGet())<<std::endl;
std::cout<<"class1.b="<<class2.myGet()<<" "<<"*b="<<*(class2.myGet())<<std::endl;
}
执行结果:
也就是两个对象的数据成员不一样,但保存的值都是5
答:缺省的拷贝构造函数都是浅构造,当对象含有指针数据成员,并用它初始化同类型的另一个对象时,缺省的拷贝构造函数只能将该对象的数据成员的值复制给另一个对象,而不能将该对象整个复制过去。这样,就可能出现同一内存单元释放两次,导致程序运行出错。
- 关于拷贝构造函数的一个问题
- 关于构造函数与拷贝构造函数的问题
- 关于拷贝构造函数、字符串拷贝的问题
- 拷贝构造函数关于指针的拷贝问题
- 一个关于深层拷贝的问题(迷惑在私有构造函数)
- 拷贝构造函数的问题
- 关于C++拷贝构造函数的一些问题
- 关于构造函数,拷贝构造函数与析构函数的自动调用的问题分析
- 关于拷贝构造函数
- 关于拷贝构造函数
- 关于拷贝构造函数
- 关于拷贝构造函数
- 关于拷贝构造函数
- 关于拷贝构造函数
- 关于拷贝构造函数
- 关于拷贝构造函数
- 一篇关于拷贝构造函数的争论
- 关于拷贝构造函数的一些摘要
- Qt-embedded-linux-opensource-src-4.5.1移植到mini2440
- 关于SAX,DOM,JAXP,JDOM,DOM4J(转)
- pdf 去掉 水印
- 开篇
- SqlServer2008 数据库同步的两种方式
- 关于拷贝构造函数的一个问题
- hdu 1078
- Java使用FTP上传文件被损坏的问题
- C#中结构和类的区别【转】
- C++中引用和指针的区别
- oracle函数大全
- 使用Coolite.AjaxMethods.XXX局部刷新Microsoft的GridView
- freemarker用法
- httpd常用模块编译