码迷,mamicode.com
首页 > 其他好文 > 详细

深层复制构造函数--初识

时间:2017-03-28 20:44:51      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:程序   指针   out   turn   执行   amp   成员   ...   产生   

浅层复制构造函数会产生迷途指针,进而造成程序崩溃,所以,我们需要用深层复制构造函数来解决这个问题
 
#include <iostream>
using namespace std;
class A
{
public:
A() { x = new int; *x = 5; }
~A() { delete x; x = NULL; }         //删除指针后,紧接着就要把指针设置为 NULL,养成这样的习惯
A(const A&a) //深层复制构造函数
{
cout << "复制构造函数执行...\n" << endl;
x = new int;                 //为成员变量创建一个新的内存(堆)区域
                      //x是在堆中有别于原指针的新的空间,所以原对象被删除,不影响复制出来的新对象
*x = *(a.x); //把旧对象内容赋值给新的对象
/*深层复制构造函数有别于浅层复制构造函数,在于一:复制构造函数为新的指针成员变量提供新的内存空间(可以是堆,也可以是栈),同时把指针成员变量的值赋给新的指针,作为新的指针所指向地址的内容*/
}
void print()const { cout << *x << endl; }
void set(int i) { *x = i; }
private:
int *x;
};
int main()
{
A *a = new A();
cout << "a:";
a->print();
A b = (*a);                 //在栈中复制一个a的对象 b
cout << "a:";
a->print();
cout << "b:";
b.print();
a->set(998);
b.set(43);
a->print();
b.print();
A *c = new A(*a);            //在堆中复制一个a的对象c
c->set(76);
c->print();
delete c;
delete a;
system("pause");
return 0;
}
 
 

深层复制构造函数--初识

标签:程序   指针   out   turn   执行   amp   成员   ...   产生   

原文地址:http://www.cnblogs.com/zjttf/p/6636718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!