深夜美女视频一区二区_91sao在线看片水片_亚洲日韩国语_精品中文字幕久久边人妻_高潮喷水香蕉视频色_白洁国产剧情Av手机在线_国产精品情侣呻吟_天空影院播放免费完整版视频_少妇高潮惨叫喷水在线观看_公交车大龟廷进我身体里

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

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

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

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

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

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


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

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

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)自動(dòng)的去分配和釋放,而使用new創(chuàng)建的指針對(duì)象是在堆中分配內(nèi)存,當(dāng)不需要該對(duì)象時(shí),需要我們手動(dòng)的去釋放,否則會(huì)造成內(nèi)存泄漏。棧中對(duì)象的釋放順序,是后定義的先釋放。


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

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



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

歡迎登錄盛圖科技

歡迎注冊(cè)盛圖科技

已有賬號(hào),立即登錄