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

C++ virtual destructor虛擬析構(gòu)函數(shù)

 更新時間:2021年05月24日 09:24:48   作者:我是小白呀  
C++中基類采用virtual虛析構(gòu)函數(shù)是為了防止內(nèi)存泄漏。具體地說,如果派生類中申請了內(nèi)存空間,并在其析構(gòu)函數(shù)中對這些內(nèi)存空間進行釋放,今天通過本文給大家介紹C++ virtual destructor虛擬析構(gòu)函數(shù)的相關(guān)知識,感興趣的朋友一起看看吧

概述

虛析構(gòu)函數(shù) (virtual destructor) 可以幫我們實現(xiàn)基類指針刪除派生類對象.

在這里插入圖片描述

問題

當(dāng)我們從派生類的對象從內(nèi)存中撤銷時會先調(diào)用派生的析構(gòu)函數(shù), 然后再基類的析構(gòu)函數(shù), 由此就會產(chǎn)生問題:

  • 如果用 new 運算符建立了派生類對象, 并且由一個基類的指針比那里指向該對象
  • 用 delete 運算符撤銷對象時, 系統(tǒng)只執(zhí)行基類的析構(gòu)函數(shù). 而不執(zhí)行派生類的析構(gòu)函數(shù), 派生類對象析構(gòu)中要求的工作將被忽略

Base 類:

#ifndef PROJECT6_BASE_H
#define PROJECT6_BASE_H

#include <iostream>
using namespace std;

class Base {
public:
    Base() {
        cout << "執(zhí)行基類構(gòu)造函數(shù)" << endl;
    };
    ~Base() {
        cout << "執(zhí)行基類析構(gòu)函數(shù)" << endl;
    };
};

#endif //PROJECT6_BASE_H

Derived 類:

#ifndef PROJECT6_DERIVED_H
#define PROJECT6_DERIVED_H

#include <iostream>
#include "Base.h"
using namespace std;

class Derived : public Base {
public:
    Derived() {
        cout << "執(zhí)行派生類構(gòu)造函數(shù)" << endl;
    };
    ~Derived() {
        cout << "執(zhí)行派生類析構(gòu)函數(shù)" << endl;
    }
};

#endif //PROJECT6_DERIVED_H

main:

#include <iostream>
#include "Derived.h"
using namespace std;

int main() {

    Base *pt =new Derived;
    delete pt;

    return 0;
}

輸出結(jié)果:

執(zhí)行基類構(gòu)造函數(shù)
執(zhí)行派生類構(gòu)造函數(shù)
執(zhí)行基類析構(gòu)函數(shù)

虛析構(gòu)函數(shù)

當(dāng)基類的析構(gòu)函數(shù)為虛函數(shù)時, 無論指針指的是同一族中的哪一個類對象, 系統(tǒng)會采用動態(tài)關(guān)聯(lián), 掉啊用相應(yīng)的析構(gòu)函數(shù), 對該對象進行清理工作. 即先調(diào)用了派生類的析構(gòu)函數(shù), 再調(diào)用了基類的析構(gòu)函數(shù).

Base 類:

#ifndef PROJECT6_BASE_H
#define PROJECT6_BASE_H

#include <iostream>
using namespace std;

class Base {
public:
    Base() {
        cout << "執(zhí)行基類構(gòu)造函數(shù)" << endl;
    };
    virtual ~Base() {
        cout << "執(zhí)行基類析構(gòu)函數(shù)" << endl;
    };
};

#endif //PROJECT6_BASE_H

Derived 類:

#ifndef PROJECT6_DERIVED_H
#define PROJECT6_DERIVED_H

#include <iostream>
#include "Base.h"
using namespace std;

class Derived : public Base {
public:
    Derived() {
        cout << "執(zhí)行派生類構(gòu)造函數(shù)" << endl;
    };
    ~Derived() {
        cout << "執(zhí)行派生類析構(gòu)函數(shù)" << endl;
    }
};

#endif //PROJECT6_DERIVED_H

main:

#include <iostream>
#include "Derived.h"
using namespace std;

int main() {

    Base *pt =new Derived;
    delete pt;

    return 0;
}

輸出結(jié)果:

執(zhí)行基類構(gòu)造函數(shù)
執(zhí)行派生類構(gòu)造函數(shù)
執(zhí)行派生類析構(gòu)函數(shù)
執(zhí)行基類析構(gòu)函數(shù)

總結(jié)

如果將基類的析構(gòu)函數(shù)聲明為虛函數(shù)時, 由該基類所派生的所有派生類的析構(gòu)函數(shù)也都自動成為虛函數(shù). 即使派生類的析構(gòu)函數(shù)與其基類的構(gòu)造函數(shù)名字不相同.

最好把基類的析構(gòu)函數(shù)聲明為虛函數(shù). 即使基類并不需要析構(gòu)函數(shù), 我們也可以定義一個函數(shù)體為空的虛析構(gòu)函數(shù), 以保證撤銷動態(tài)分配空間能正確的處理.

注: 構(gòu)造函數(shù)不能聲明為虛函數(shù).

以上就是C++ virtual destructor虛擬析構(gòu)函數(shù)的詳細內(nèi)容,更多關(guān)于C++虛擬析構(gòu)函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • c語言實現(xiàn)通訊錄管理系統(tǒng)詳細實例

    c語言實現(xiàn)通訊錄管理系統(tǒng)詳細實例

    這篇文章主要給大家介紹了關(guān)于c語言實現(xiàn)通訊錄管理系統(tǒng)的相關(guān)資料,通訊錄管理系統(tǒng)是一種常見的應(yīng)用程序,可以用來管理聯(lián)系人的信息,包括姓名、電話號碼、地址等,需要的朋友可以參考下
    2023-07-07
  • C語言實現(xiàn)最長遞增子序列問題的解決方法

    C語言實現(xiàn)最長遞增子序列問題的解決方法

    這篇文章主要介紹了C語言實現(xiàn)最長遞增子序列問題的解決方法,采用遞歸的方法解決該問題,是非常經(jīng)典的一類算法,需要的朋友可以參考下
    2014-09-09
  • C語言的堆串操作詳解

    C語言的堆串操作詳解

    大家好,本篇文章主要講的是C語言的堆串操作詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • C++STL教程之vector模板的使用

    C++STL教程之vector模板的使用

    模板類vector是一個動態(tài)數(shù)組,類似于string類,可存放任意類型,能夠末尾、中間增加數(shù)據(jù),基本上是是new創(chuàng)建動態(tài)數(shù)組的替代品,vector可以自動完成new和delete
    2022-08-08
  • 詳解C語言中的符號常量、變量與算術(shù)表達式

    詳解C語言中的符號常量、變量與算術(shù)表達式

    這篇文章主要介紹了C語言中的符號常量、變量與算術(shù)表達式,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-11-11
  • C++?命名空間與輸入輸出操作代碼

    C++?命名空間與輸入輸出操作代碼

    C++是一種面向?qū)ο蟮挠嬎銠C程序設(shè)計語言,?它擴展了C語言的功能,?并引入了面向?qū)ο缶幊痰母拍??如類、?繼承和多態(tài)等,C++是以C語言為基礎(chǔ)進行了拓展與創(chuàng)新,C++兼容C語言絕大多數(shù)的語法,這篇文章主要介紹了C++?命名空間與輸入輸出,需要的朋友可以參考下
    2024-08-08
  • epoll封裝reactor原理剖析示例詳解

    epoll封裝reactor原理剖析示例詳解

    這篇文章主要為大家介紹了epoll封裝reactor原理剖析示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • C++ 設(shè)置控制臺(命令行)窗口 光標(biāo)位置,及前背景顏色

    C++ 設(shè)置控制臺(命令行)窗口 光標(biāo)位置,及前背景顏色

    這篇文章主要介紹了C++ 設(shè)置控制臺(命令行)窗口 光標(biāo)位置,及前背景顏色,需要的朋友可以參考下
    2019-04-04
  • 淺談頭文件algorithm中的常用函數(shù)

    淺談頭文件algorithm中的常用函數(shù)

    下面小編就為大家?guī)硪黄獪\談頭文件algorithm中的常用函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 針對Ruby的Selenium WebDriver安裝指南

    針對Ruby的Selenium WebDriver安裝指南

    這篇文章主要介紹了針對Ruby的Selenium WebDriver安裝指南,Selenium直接運行于瀏覽器之中,是進行各種調(diào)試的一大神器,需要的朋友可以參考下
    2015-07-07

最新評論

博兴县| 嘉峪关市| 荣昌县| 定远县| 襄垣县| 威宁| 永安市| 汤原县| 万山特区| 高州市| 镶黄旗| 三穗县| 新余市| 讷河市| 顺义区| 志丹县| 保康县| 衢州市| 固镇县| 遵化市| 阿荣旗| 铁岭县| 衢州市| 仙桃市| 当雄县| 沐川县| 修文县| 静安区| 宝丰县| 长子县| 宿迁市| 雅安市| 恩平市| 罗源县| 大安市| 吉首市| 松溪县| 陵水| 楚雄市| 田阳县| 岑溪市|