- 论坛徽章:
- 0
|
看下面的例子来自书上(讲解的是浅层复制的例子):
书上说在main函数的delete a后会崩溃的,我也认同,但是实际操作没有啊!
我是在Ubuntu 12.04下测试的.
#include <iostream>
using namespace std;
class A
{
public:
A(){ x=new int;*x=5; cout<<"构造函数"<<endl; }
~A(){ cout<<x;delete x; x=NULL; cout<<" is freed, 析构函数"<<endl; }
A(const A&a)
{
cout<<"执行复制构造函数"<<endl;
x=a.x;
}
void print()const{cout<<*x<<endl;}
void set(int i){*x=i; cout<<x<<" address is set"<<endl;}
private:
int *x;
};
int main()
{
A *a = new A();
cout<<"a:";a->print();
cout<<endl;
A b=(*a);
cout<<"b:";
b.print();
cout<<endl;
a->set(32);
cout<<"after a->set(32), b:";b.print();
cout<<endl;
b.set(99);
cout<<"a:";
a->print();
cout<<endl;
cout<<"I am deleting the object a"<<endl;
delete a;
for(int i=0;i<100000;i++)
{
char *p=new char [2000000];
}
b.set(33);
cout<<"b:";
b.print();
cout<<endl;
return 0;
} |
|