big three三大函數:拷貝構造拷貝賦值析構函數

析構函數:

析構函數的調用:

      
在這個對象的作用域最後..

比如你在main裏面聲明瞭一個類A..那麼~A()會在main結束時調用..
如果在自定義的函數f()裏面聲明瞭一個A  函數f結束的時候就會調用~A()

或者你delete 指向A的指針..
或者顯式的調用析構函數
追問
也就是說在包含該對象的函數的末尾就會調用析構函數嘍?
追答
是的....

局部的對象 在該對象聲明的函數末尾被釋放...

你可以看下作用域的定義..析構函數就是在對象的作用域的末尾釋放

爲了不誤導人...我還是舉個例子..

如果是
class A
{
....
}
void f()
{
   A a;
  //這種情況a的作用域就是整個函數 在f末尾釋放
}
void f()
{
      for(A a;a.yes();a++)//這裏聲明的是一個計數器a..(這種情況一般是迭代器)..
     {
               ...
    } 
       //這裏是a作用域結束的時候 調用析構函數
}
void f()
{
     A* p=new A;

     delete p;//A作用域結束 調用析構
}

如果A是全局對象..那麼就在程序末尾釋放



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章