zoukankan      html  css  js  c++  java
  • C++ 析构函数

    析构函数

    析构函数:是一种特殊的成员函数,没有返回值,不需要程序员显式调用,而是在销毁对象是自动执行。

    注意:析构函数没有参数,不能被重载,一个类只有一个析构函数,如果没有定义,编译器会自动生成一个默认的析构函数。

    注意:用new分配内存时会调用构造函数,用delete释放内存时会调用析构函数。

    析构函数的执行时机

    全局对象:在所有函数之外创建的对象,它和全局变量类似,位于内存分区中的全局数据区,程序在结束执行时会调用这些对象的析构函数。

    局部对象:在函数内部创建的对象,它和局部变量类似,位于栈区,函数执行结束时会调用这些对象的析构函数。

    new创建的对象位于堆区,通过delete删除时才会调用析构函数,如果没有delete,析构函数就不会被执行。

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Demo{
    public:
        Demo(string s);
        ~Demo();
    private:
        string m_s;
    };
    Demo::Demo(string s): m_s(s){ }
    Demo::~Demo(){ cout<<m_s<<endl; }
    void func(){
        //局部对象
        Demo obj1("局部对象1");
    }
    //全局对象
    Demo obj2("全局对象");
    int main(){
        //局部对象
        Demo obj3("局部对象2");
        //new创建的对象
        Demo *pobj4 = new Demo("new创建的对象");
        func();
        cout<<"main"<<endl;
      
        return 0;
    }
    
    /*运行结果:*/
    局部对象1 //func()函数执行完释放
    main
    局部对象2 //main()函数执行完释放
    全局对象  //程序执行完释放
    
  • 相关阅读:
    在C#用HttpWebRequest中发送GET/HTTP/HTTPS请求
    微信公众平台开发(71)OAuth2.0网页授权
    IOS与安卓的远程调试
    解密和解压浏览器上加密的js文件
    appium 学习和环境搭建
    远程桌面工具 TeamViewer
    typescript 学习
    webstore 与 热编译的配置冲突
    CSS 温故而知新 断句失败
    自动化测试 python2.7 与 selenium 2 学习
  • 原文地址:https://www.cnblogs.com/xiaobaizzz/p/12347121.html
Copyright © 2011-2022 走看看