最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++自動析構(gòu)時的順序問題

 更新時間:2020年03月19日 11:19:17   作者:weixin_43778179  
這篇文章主要介紹了C++自動析構(gòu)時的順序,通過實(shí)例代碼給大家講解了C++ 構(gòu)造與析構(gòu)的執(zhí)行順序,代碼簡單易懂,非常不錯對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

自動析構(gòu)時是先析構(gòu)后構(gòu)造的.

//普通(非模板)類的成員模板
class DebugDelete{
public:
 DebugDelete(ostream &s = cerr) :os(s){}
 template <typename T>void operator()(T*p)const
 {
 os << "deleting unique_ptr " <<typeid(T).name() <<endl;
 delete p;
 }
private:
 ostream &os;
};
void demo_general_class_tempalte_member()
{
 double *p = new double;
 DebugDelete d;
 d(p);//d調(diào)用DebugDelet::operator()(double*),釋放p
 int* ip = new int;
 //在一個臨時DebugDelete 對象上調(diào)用operator()(int*)
 DebugDelete()(ip);
 //實(shí)例化DebugDelete::opeartor()<int>(int*)const
 unique_ptr<int, DebugDelete>p2(new int, DebugDelete());
 //實(shí)例化DebugDelete::opeartor()<string>(string*)const
 unique_ptr<string, DebugDelete>sp(new string, DebugDelete());
}

這里輸出

deleting unique_ptr  double
deleting unique_ptr  int
deleting unique_ptr  class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
deleting unique_ptr  int

可以看到,主動析構(gòu)的正常進(jìn)行.

函數(shù)結(jié)束后自動析構(gòu)的,先創(chuàng)建了int后創(chuàng)建了string,但是先析構(gòu)了string

class B
{
public:
 virtual ~B(){ cout << "delete B" << endl; }
};
class D :B
{
public:
 virtual ~D() override{ cout << "delete D" << endl; }
};
void demo_delete()
{
 D d;
}

輸出

delete D

delete B

這里構(gòu)造時是先構(gòu)造基類,再構(gòu)造派生類.但是在析構(gòu)時是先析構(gòu)了子類,再析構(gòu)了基類。

知識點(diǎn)補(bǔ)充:C++ 構(gòu)造與析構(gòu)的執(zhí)行順序

1、代碼如下:

class A
{
public:
 int _Id; 
 A():_Id(0)
 {
 printf("A[%d]\n",_Id);
 }

~A()
 {
 printf("~A[%d]\n",_Id);
 }
};

class B
{
public:
 A _A;
 A* _PA;
 B()
 {
 printf("B\n");
 }
 ~B()
 {
 printf("~B\n");
 delete _PA;
 }
};

int main(int argc, char* argv[])
{
 {
 B b;
 b._PA = new A();
 b._PA->_Id = 17;
 }

 return 0;
}

2、執(zhí)行順序

A[0]
B
A[0]
~B
~A[17]
~A[0]

3、B是棧上對象,C++保證棧上對象離開作用域,會自動調(diào)用析構(gòu)方法。

4、考慮b中的對象,_A是棧上對象,_PA是指針,堆上對象,對于_PA必須delete,否則資源泄露。而對于_A不需要處理,會自動調(diào)用析構(gòu)方法??梢赃@樣理解,對象b離開作用域,調(diào)用析構(gòu)方法,而b中的_A當(dāng)然也離開了作用域(皮之不存毛將存焉),調(diào)用析構(gòu)方法。

5、碰到過這樣的情況,vs自動生成的析構(gòu)方法有問題,導(dǎo)致崩潰。手動添加一個析構(gòu)方法,就可以了。

總結(jié)

到此這篇關(guān)于C++自動析構(gòu)時的順序的文章就介紹到這了,更多相關(guān)C++自動析構(gòu)時的順序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于C++中vector的兩個小tips分享

    關(guān)于C++中vector的兩個小tips分享

    這篇文章主要給大家介紹了關(guān)于C++中vector的兩個小tips,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • C語言手寫集合List的示例代碼

    C語言手寫集合List的示例代碼

    數(shù)組長度是固定的,那么在很多時候我們并不知道到底有多少數(shù)據(jù)需要存儲,這時候我么就需要一個可變長度的數(shù)組來進(jìn)行存儲,在C語言中需要我們自己進(jìn)行定義,我們稱為集合。本文將用C語言實(shí)現(xiàn)手寫集合,需要的可以參考一下
    2022-08-08
  • 詳解C語言數(shù)組中是以列優(yōu)先嗎

    詳解C語言數(shù)組中是以列優(yōu)先嗎

    這篇文章主要給大家介紹了關(guān)于C語言指針名稱及所指變量的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • c++從函數(shù)返回數(shù)組的方法代碼

    c++從函數(shù)返回數(shù)組的方法代碼

    在本篇文章里小編給大家整理的是關(guān)于c++從函數(shù)返回數(shù)組的方法代碼,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-02-02
  • 如何基于C++解決RTSP取流報錯問題

    如何基于C++解決RTSP取流報錯問題

    這篇文章主要介紹了如何基于C++解決RTSP取流報錯問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 結(jié)構(gòu)體對齊的規(guī)則詳解及C++代碼驗(yàn)證

    結(jié)構(gòu)體對齊的規(guī)則詳解及C++代碼驗(yàn)證

    在c語言的結(jié)構(gòu)體里面一般會按照某種規(guī)則去進(jìn)行字節(jié)對齊。本文就來介紹一下如何實(shí)現(xiàn),具有一定的參考價值,感興趣的可以了解下
    2021-08-08
  • C語言中static與extern關(guān)鍵字的深入解析

    C語言中static與extern關(guān)鍵字的深入解析

    在C語言編程中,static和extern是兩個非常重要的關(guān)鍵字,它們各自有著獨(dú)特的用途,本文將深入探討這兩個關(guān)鍵字的工作原理、底層實(shí)現(xiàn)機(jī)制以及在實(shí)際開發(fā)中的應(yīng)用,感興趣的小伙伴跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • 簡單的漢諾塔問題解法代碼

    簡單的漢諾塔問題解法代碼

    漢諾塔本是C語言開門就學(xué)的東西,簡單的漢諾塔問題解法代碼
    2013-03-03
  • MongoDB?C?驅(qū)動程序安裝(libmongoc)?和?BSON?庫(libbson)方法

    MongoDB?C?驅(qū)動程序安裝(libmongoc)?和?BSON?庫(libbson)方法

    這篇文章主要介紹了安裝?MongoDB?C?驅(qū)動程序?(libmongoc)?和?BSON?庫?(libbson),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • C++ LeetCode1781題解所有子字符串美麗值之和

    C++ LeetCode1781題解所有子字符串美麗值之和

    這篇文章主要為大家介紹了C++ LeetCode1781題解所有子字符串美麗值之和,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評論

四会市| 高尔夫| 固安县| 恩平市| 静宁县| 星子县| 克拉玛依市| 沂源县| 揭西县| 阿拉尔市| 天气| 咸宁市| 隆昌县| 陵水| 宜黄县| 沈阳市| 开远市| 永城市| 镇平县| 扶风县| 阜平县| 宜君县| 沙田区| 盐源县| 淮阳县| 梧州市| 晋宁县| 金昌市| 开江县| 麻栗坡县| 平乡县| 马关县| 连城县| 淮北市| 闻喜县| 盐亭县| 张家港市| 电白县| 绿春县| 洪洞县| 黑水县|