2014-12-06 72 views
-4

如果我們第一次刪除一個指針,它會釋放內存並將NULL指定給指針。 如果我們第二次刪除指針(具有NULL值),則不會發生任何事情,並且不會拋出任何錯誤。C++:爲什麼不是像刪除指針那樣設計的析構函數?

那麼爲什麼不是像刪除一個指針那樣設計的析構函數,我們手工調用一個對象的析構函數,併爲對象賦值,如NULL。 這樣可以多次調用析構函數而沒有錯誤?

[更新]我的意思是我們明確地將NULL分配給指針。

+2

刪除第二次?未定義的行爲=任何事情都可能發生。如果析構函數可以多次調用而不會崩潰取決於您,但無關緊要。 – deviantfan 2014-12-06 00:55:18

+1

*「如果我們第一次刪除一個指針,它會釋放內存並將NULL指定給指針。」* - 這是不正確的。 'int * x = new int;刪除x;刪除x;'會調用未定義的行爲。 'delete'的作用是*調用指向對象的析構函數,然後釋放它的內存。 – 5gon12eder 2014-12-06 00:55:27

+5

在指針**上調用'delete'不會爲其分配NULL。並且第二次刪除指針是**未定義的行爲**,這在某些平臺上可能無效,但通常會導致**堆損壞**。而且析構函數能夠被調用兩次也沒有任何意義,因爲你只能摧毀一次。一旦它被摧毀,它就會被摧毀,一段時間,你不能再摧毀它。 – 2014-12-06 00:56:44

回答

3

構造函數和析構函數的全部用途是避免手工調用析構函數。它的設計使對象在不再使用時自動銷燬。這使得程序員不小心忘記刪除一個對象變得更加困難;或者使用已經被刪除的對象。

+0

謝謝。是的,我在問設計目的。 – user1914692 2014-12-06 16:14:53

相關問題