最新国产AV资源网_亚洲熟女AV天堂五月天_中文字幕丶东京热_中文字幕乱码免费高清视频

Hi,您好,歡迎來到西安盛圖軟件科技有限公司!

C++ 析構(gòu)函數(shù)

發(fā)布時間:2023-12-14 14:52:10

函數(shù)是僅在調(diào)用時運(yùn)行的代碼塊。可以將數(shù)據(jù)(稱為參數(shù))傳遞給函數(shù)。函數(shù)可以返回數(shù)據(jù)。函數(shù)是組織好的,可重復(fù)使用的C++| 析構(gòu)函數(shù),用來實現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。本文主要介紹C++ 析構(gòu)函數(shù)。

1、析構(gòu)函數(shù)

類的析構(gòu)函數(shù)是類的一種特殊的成員函數(shù),它會在每次刪除所創(chuàng)建的對象時執(zhí)行。刪除對象時,自動被調(diào)用,用來釋放對象占用的空間。析構(gòu)函數(shù)的名稱與類的名稱是完全相同的,只是在前面加了個波浪號(~)作為前綴,它不會返回任何值,也不能帶有任何參數(shù)。析構(gòu)函數(shù)有助于在跳出程序(比如關(guān)閉文件、釋放內(nèi)存等)前釋放資源。


2、C++ 創(chuàng)建對象三種方式

如在C++中定義了一個Test類,有三種方式創(chuàng)建對象:

1)棧中分配內(nèi)存

Test p1(1);   

2)棧中分配內(nèi)存,是上面創(chuàng)建的完整模式

Test p2 = Test(2); 

3)堆中分配內(nèi)存

Test *p3 = new Test(3); 

注意:棧中分配內(nèi)存,在棧中內(nèi)存由系統(tǒng)自動的去分配和釋放,而使用new創(chuàng)建的指針對象是在堆中分配內(nèi)存,當(dāng)不需要該對象時,需要我們手動的去釋放,否則會造成內(nèi)存泄漏。棧中對象的釋放順序,是后定義的先釋放。


3、析構(gòu)函數(shù)的使用示例

1)相同作用域

#include <iostream>
using namespace std;
class Test
{

   int id;
public:
   Test(int i)
   {
       id = i;
   }
   ~Test()
   {
       cout<<"ID: "<<id<<" destruction function is invoked!"<<endl;
   };
};
int main()
{
   Test t0(0);                   //棧中分配  
   Test t1[3]{1,1,1};        //棧中分配,數(shù)組型對象
   Test *t2 = new Test(2);       //堆中分配
   delete t2;
   Test *t3 = new Test[3]{3,3,3};//堆中分配
   delete []t3;
   cout<<"------End of Main-------"<<endl;
   return 0;
}


2)不同作用域

#include <iostream>
using namespace std;
class Test
{

   int id;
public:
   Test(int i)
   {
       id = i;
   }
   ~Test()
   {
       cout<<"ID: "<<id<<" destruction function is invoked!"<<endl;
   };
};
Test t0(0);                        //最先創(chuàng)建的對象,最后釋放
void Func()
{
   static Test t1(1);               //創(chuàng)建靜態(tài)對象,會在整個程序結(jié)束時自動釋放
   Test t2(2);             //在Func結(jié)束時自動釋放
   cout<<"-----Func-----"<<endl;
}
int main()
{
   Test t3(3);
   t3 = 10;                         //類型轉(zhuǎn)換構(gòu)造函數(shù),這里會創(chuàng)建臨時對象,將int型轉(zhuǎn)成Test類型對象,在賦值結(jié)束后,臨時變量銷毀
   cout<<"------Begin of Main-------"<<endl;
   {
       Test t4(4);                  //花括號代表作用域,不需要等到main方法結(jié)束就釋放了
   }
   Func();                          //進(jìn)入Func函數(shù)
   cout<<"------End of Main-------"<<endl;
   return 0;
}

以上為本次所有分享內(nèi)容



上一篇:C++ |類的靜態(tài)成員變量和函數(shù)
下一篇:一款提高嵌入式代碼質(zhì)量的工具

歡迎登錄盛圖科技

歡迎注冊盛圖科技

已有賬號,立即登錄