复制构造函数
来源:互联网 发布:pypi.python.org 编辑:程序博客网 时间:2024/04/29 16:23
调用构造函数进行强制类型转换:
#include<iostream>using namespace std;class A{public:int a;A(int x){a=x;cout<<"constructor!"<<endl;}/*explicit A(int x){a=x;cout<<"constructor!"<<endl;}*/ A( const A&b){a=b.a;cout<<"copy constructor!"<<endl;}void print(){cout<<a<<endl;}~A(){cout<<"disconstruct!"<<endl;}};int main(){A a(56);A b(34);b=1000;b.print();return 0;}
输出结果:
b=1000;调用构造函数创建临时对象,赋给b,然后析构。这是隐式强制类型转换,这种转换有时候会出问题,为了避免这种问题可以使用explicit关键字关闭这种特性。如上注释掉的部分。
所有的复制构造函数都只有一个参数,即该类的对象。由于复制的对象一般的不会更改,所以通常将引用定义为常量。
浅层复制构造函数:通过编译器提供的默认复制构造函数给新的对象赋值,如果是一般的成员变量是没问题的。如果是指针成员变量则可能会出错。在对指针进行赋值时两个对象的成员指针同时指向了一个内存区域,当一个对象删除后,析构函数就自动释放指针的内存区域,另一个对象的成员指针就成了一个迷途指针了。
#include<iostream>using namespace std;class A{public:int *a;void print(){cout<<*a<<endl;}A(int c){//由于a是指针所以必须开辟堆空间如果是如下//*a=c;//则会出错,因为c是局部变量,//构造函数执行完后就销毁,a就成了迷途指针a=new int(c);}/*A(const A&d){cout<<"深层复制构造函数"<<endl;a=new int;*a=*(d.a);}*/~A(){delete a;}};int main(){A *b=new A(5);A c=(*b);c.print();delete b;c.print();}
程序崩溃,指针b指向的内存被删除,c成了迷途指针。
为了解决浅层复制构造函数造成的迷途 指针问题我们必须自己定义复制构造函数。在函数中为指针成员函数开辟新的内存区域。例程如上,将注掉的复制构造函数添加上就ok'了。该复制构造函数就是传说中的深层复制构造函数。
- 构造函数 复制构造函数
- 深复制-复制构造函数
- 关于复制构造函数
- 关于复制构造函数
- 关于复制构造函数
- 关于复制构造函数
- 关于复制构造函数
- 学习复制构造函数
- 复制构造函数
- 复制构造函数
- 复制构造函数
- 复制构造函数
- 复制构造函数总结
- 复制构造函数
- 复制构造函数
- C++复制构造函数
- 复制构造函数实例
- 复制构造函数
- 引用
- JAVA操作properties文件
- CWebBrowser2 create失败Debug版
- 有一些人,和我一样,真的不快乐
- hdu1717 小数化分数2
- 复制构造函数
- linux下安装transmission下载种子
- 仿脑计算需要注意的几个问题
- 上学期C++作业博文
- 开源项目连接地址
- windows主机IIS7.5中添加配置404页面的方法
- Android电话相关的操作 - 打电话,接电话,挂电话
- 背包九讲
- 差距在哪里-上进人必看