前面说到了拷贝构造函数,但是情况并未列举完。我怕文章太长就分开写,看的舒服。
有一种情况,那就是当构造函数中有指针操作,怎么办?
#include <iostream>
using namespace std;
class A{
private:
int *a;
public:
A(){
a = new int[100];
cout<<"构造函数"<<endl;
}
~A(){
delete []a;
cout<<"析构函数"<<endl;
}
};
int main(){
A a;
A b = a;
return 0;
}
看起来没有错,但是会在运行时报错:
翻译一下,testSTACK是我工程的名字,被释放的指针没有被分配,也就是说析构函数释放了一个空指针!
怎么会呢?
这就涉及到一个知识点,就是堆栈关系:堆栈关系
如果嫌文章太长,那我就简单说一下。new出来的对象和指针不存放在同一片内存中,他们是指向关系。