考慮下面的代碼:C++:刪除指針結構
struct A {
int someInt;
};
A *a = new A;
A *b;
delete a; // ok
delete b; // crash
它崩潰了,但我不知道爲什麼。我認爲刪除空指針是沒有任何操作的。
我甚至需要刪除結構嗎?在堆上創建結構是不好的做法嗎?在堆棧上創建它們會更好嗎?
考慮下面的代碼:C++:刪除指針結構
struct A {
int someInt;
};
A *a = new A;
A *b;
delete a; // ok
delete b; // crash
它崩潰了,但我不知道爲什麼。我認爲刪除空指針是沒有任何操作的。
我甚至需要刪除結構嗎?在堆上創建結構是不好的做法嗎?在堆棧上創建它們會更好嗎?
刪除空指針是沒有操作,是的,所以如果b
是空指針,那麼你會沒事的。
但事實並非如此。這是一個未初始化變量與不確定值。
這裏有一個空指針:
A* b = nullptr;
(如果你在全局範圍內寫A* b;
,或者如果你在一個函數寫static A* b;
,或者如果你是定義一個類的靜態成員,然後b
具有靜態存儲持續時間和自動零初始化你;這是一個例外)
而且,是的,你應該避免動態分配,其中可能—使用它沒有很好的理由你的代碼複雜化了,好了。 FO沒有理由。
所以我需要明確地說'A * b = NULL;'? –
@EikeCochu:是的。 –
b
是一個未初始化的指針。沒有什麼可以刪除的。
所有這些代碼是在一個函數內部還是在一些內部?它有所作爲 –