#include <iostream>
using namespace std;
class A
{
public:
A(){x=new int;*x=5;} //创建一个对象的同时将成员指针指向的变量保存到 新空间中
~A(){delete x;x = NULL;} //析构对象的同时删除成员指针指向的内存空间,为了稳妥起见将指针赋为空
A(const A &a)
{
cout << "复制构造函数执行...\n" <<endl;
x=new int; //复制构造对象的同时将成员指针指向的变量保存到新空间中
*x = *(a.x); //读取旧对象的成员指针x指向的空间处的数据并赋给新对象的成员指针x所指向的内存区域
}
int print()const{return *x;}
void set(int i){*x=i;}
private:
int *x;
};
int main()
{
A *a = new A();
cout<<"a:"<<a->print()<<endl; //5
cout<<"b:"<<b.print()<<endl; //32
b.set(99);
cout<<"a:"<<a->print()<<endl;
delete a; //删除了x,new的内存区域释放掉了,程序报错(b也指向该区域)
return 0;
}
using namespace std;
class A
{
public:
A(){x=new int;*x=5;} //创建一个对象的同时将成员指针指向的变量保存到 新空间中
~A(){delete x;x = NULL;} //析构对象的同时删除成员指针指向的内存空间,为了稳妥起见将指针赋为空
A(const A &a)
{
cout << "复制构造函数执行...\n" <<endl;
x=new int; //复制构造对象的同时将成员指针指向的变量保存到新空间中
*x = *(a.x); //读取旧对象的成员指针x指向的空间处的数据并赋给新对象的成员指针x所指向的内存区域
}
int print()const{return *x;}
void set(int i){*x=i;}
private:
int *x;
};
int main()
{
A *a = new A();
cout<<"a:"<<a->print()<<endl; //5
A b=(*a); //b,a都指向同一块内存空间(5)
b.print();//5
a->set(32);cout<<"b:"<<b.print()<<endl; //32
b.set(99);
cout<<"a:"<<a->print()<<endl;
delete a; //删除了x,new的内存区域释放掉了,程序报错(b也指向该区域)
return 0;
}