程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 由STL所想到的 C++顯示調用析構函數,stl函數

由STL所想到的 C++顯示調用析構函數,stl函數

編輯:C++入門知識

由STL所想到的 C++顯示調用析構函數,stl函數


  在STL中的容器中的析構函數中,會經常調用destroy()這個函數 

  在STL中  destroy()被重載了 這點在這裡到不去討論 這裡貼最簡單的那個版本

  template<class T>

  inline void destory(T * pointer)

  {

    pointer->~T();  

  }

  這裡通過指針調用了析構函數。C++ 顯示析構函數是一個怎麼執行流程呢?

  2點來討論: 1)通過指針或者引用 2)通過值

  

#include <iostream>
using namespace std;
class A
{
public:
	A():a(2),b(3),c(4)
	{}
	~A()
	{
		cout<<"析構函數被調用"<<endl;
	}
	int GETA()
	{
		return a;
	}
private:
	int a;
	int b;
	int c;
};
int main(int argv,char* argc[])
{
	A a;
	//調用析構函數
	a.~A();
	cout<<"********************"<<endl;
//	A *b=new A();
//	b->~A();
	cout<<"*******************"<<endl;

	cout<<a.GETA()<<endl;
//	cout<<b->GETA()<<endl;
	cout<<"程序結束"<<endl;
}

  對於a來講  的確調用了析構函數  但是在程序結束時 析構函數再次被調用

  把上面的替換成a(這裡就不貼了) 最後程序結束時b所指向的對象不再次調用析構函數 但是通過b還是能訪問到類內的值。【當然這裡沒有delete b 會發生內存洩露】

  這裡顯示通過對象值調用析構函數 並不會真正的把內容從棧中銷毀 所以對象還是存在的。

  同理 顯示調用構造函數也不會去重新創造一個對象出來。而且還可能造成內存洩露的情況發生。

 


誰可以幫解釋下面程序代碼的運行結果,程序中C的構造函數明明只調用了兩次,而C的析構函數卻調用了3此

按照c++標准,編譯器會生成五個默認成員函數:
默認構造函數
拷貝構造函數
析構函數
operator=
operator&

你用到了operator= 但是並沒有去實現,因此編譯器調用默認的實現,默認的實現沒有打印構造的消息,因此感覺多destructing了一次。
 

c語言中怎使用析構函數 不是c++裡面的內容僅僅是C語言中怎使用析構函數

C語言是面向過程的編程語言,構造函數和析構函數是用在面向對象的編程語言裡的。所以C裡面是沒有析構函數的!
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved