参考资料:11 new&delete
Stack 类:
class Stack
{
public:
Stack(int default_capcity = 5)
: _data(new int[default_capcity]), _top(0), _capacity(default_capcity)
{
cout << "Stack(int default_capcity = 5)" << endl;
}
~Stack()
{
if (_data)
{
delete[] _data;
_data = nullptr;
_top = _capacity = 0;
}
cout << "~Stack()" << endl;
}
private:
int* _data;
int _top;
int _capacity;
};
示例:
int* p1 = new int;
int* p2 = new int[5];
Stack* q1 = new Stack;
// Stack(int default_capcity = 5)
Stack* q2 = new Stack[5];
// Stack(int default_capcity = 5)
// Stack(int default_capcity = 5)
// Stack(int default_capcity = 5)
// Stack(int default_capcity = 5)
// Stack(int default_capcity = 5)
① new 和 delete 以及 new[] 和 delete[] 配对使用:
delete p1;
delete[] p2;
delete q1;
// ~Stack()
delete[] q2;
// ~Stack()
// ~Stack()
// ~Stack()
// ~Stack()
// ~Stack()
② 没有配对使用:
delete p1;
delete p2;
delete q1;
// ~Stack();
delete q2;
// ~Stack();
// 报错
Tips for new and delete:
不要使用 delete 释放非动态开辟的内存。
不要对同一块动态开辟的内存多次释放。
不要试图释放动态开辟的内存的一部分,例如:
p2++; delete[] p2;。
new 和 delete 以及 new[] 和 delete[] 要配对使用。