題目:題目是讓我在標紅處填入代碼,釋放p所指向的節點。答案是delete []p;但是我不明白為什么要加[],p不是一個陣列啊...
#include<iostream>
using namespace std;
const int Size = 5;
class Stack;
class Item {
public:
Item(const int & val):item(val) {};
private:
int item;
Item* next;
friend class Stack;
};
class Stack {
public:
Stack() :top(NULL) {}
~Stack();
int Pop();
void Push(const int&);
private:
Item* top;
};
Stack::~Stack() {
Item* p = top, * q;
while (p != NULL) {
q = p->next;
delete []p;
p = q;
}
}
int Stack::Pop() {
Item* temp;
int ret;
temp = top;
ret = top->item;
top = top->next;
delete temp;
return ret;
}
void Stack::Push(const int& val) {
Item* temp = new Item(val);
temp->next = top;
top = temp;
}
int main() {
Stack s;
for (int i = 1; i < Size; i++)
s.Push(i);
cout << "The element of stack are :";
for (int i = 1; i < Size; i++)
cout << s.Pop() << '\t';
return 0;
}
uj5u.com熱心網友回復:
雖然p不是一個類物件陣列,不用加[],確實正確,但我們不提倡這樣做,因為這不規范...一般而言,需要去釋放一個被分配的類物件或者類物件陣列所占的記憶體,都統一使用delete []的方式來釋放就很規范。
這種帶中括號的寫法,能有效避免因為手誤或者其他原因而可能引發的記憶體泄漏問題,所以寫[]是個好習慣,也成了一個標準答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/71304.html
標籤:新手樂園
上一篇:大佬們這個問題怎么解決?
下一篇:尾插法的這個錯誤怎么解決?
