2017-07-04 42 views
-2
class MyClass 
{ 
    public: 
     MyClass() 
     { 
      std::cout << "MyClass Constructor" << std::endl; 
     } 

     ~MyClass() 
     { 
      std::cout << "MyClass Destructor" << std::endl; 
     } 
}; 

int main() 
{ 
    MyClass* p = new MyClass(); 
} 

是什麼 主叫P->〜MyClass的()之間的差值; 或 刪除p;Differnace和 「P->〜MyClass的()」

兩者都調用析構函數。

+0

'delete'也會將分配的內存返回給操作系統。我不認爲這樣明確地調用析構函數是合法的,無論如何 –

+3

@ Code-Apprentice明確地調用析構函數是合法的,但在這種情況下,你不能顯式地調用析構函數,因爲你需要'刪除'內存,'delete'調用析構函數,析構函數會兩次調用析構函數,這是非法的。 – Justin

+0

@ Code-Apprentice如果它在任何地方都不合法,語言不會允許你編寫它 –

回答

2

使用new運營商將:

  1. 分配的內存塊。
  2. 調用該類的構造函數,其中this指向該內存。

delete是什麼new不只是失敗的原因,所以它會在默認情況下:

  1. 調用析構函數與this指向的內存塊。
  2. 釋放內存塊。

當然,您可以重載這些運算符以表現不同的行爲。

+3

「重載的'delete'操作符需要手動調用析構函數」這不是它的工作原理。 –

+0

是的,你說得對。據此編輯。 – Mitch

相關問題