#include "iostream"
using namespace std;
class Stack{
public:
Stack(int capacity=4)
:_a(new int[capacity])
,_size(0)
,_capacity(capacity)
{
cout << "构造函数" << endl;
}
~Stack(){
delete[] _a;
_size = _capacity = 0;
cout << "析构函数" << endl;
}
private:
int *_a;
int _size;
int _capacity;
};
int main(){
Stack st;
Stack *ps = new Stack;
delete ps;
}
1、Stack st
在栈上构造一个stack对象st,实例化时在堆上开辟空间构造_a;当程序运行结束时,调用析构函数,释放堆上的_a的空间,然后栈上的st随程序结束销毁。
2、Stack *ps = new Stack; delete ps;
在栈上创建一个Stack类的指针ps,在堆上创建开空间存放这个类,ps指向这片空间,new开空间后实例化对象时调用构造函数再在堆上开空间构造_a;delete ps
时,delete会调用析构函数先释放_a在堆上的空间,然后operator delete
会释放ps指向的在堆上的存放类的空间,最后随着程序结束,在栈上的指针ps被销毁。