面向对象----析构函数、虚函数
来源:互联网 发布:海康域名 编辑:程序博客网 时间:2024/06/12 21:13
系统只会自动释放栈内空间,而堆内空间需要用户自己维护------即c语言中程序退出会释放栈中空间,而堆中自己申请的空间需要自己管理释放。
C++中,除了new来的空间存放在堆内,其他均存放在栈中。
析构函数在下边3种情况时被调用:
1.对象生命周期结束,被销毁时;
2.delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类虚构函数是虚函数时;
3.对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。
由于多态性,导致基类的指针指向派生类的时候,在析构的时候,只会析构基类的空间,不会执行派生类的析构,从而导致内存泄露。
构造函数的调用顺序总是如下:
1.基类构造函数。如果有多个基类,则构造函数的调用顺序是某类在类派生表中出现的顺序,而不是它们在成员初始化表中的顺序。
2.成员类对象构造函数。如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序,而不是它们出现在成员初始化表中的顺序。
3.派生类构造函数。
析构函数
即构造函数的顺序和析构函数的顺序完全相反
下面用例子来说说构造函数的的调用顺序:
#include "stdafx.h"#include "iostream"using namespace std;class Base{public: Base(){ std::cout<<"Base::Base()"<<std::endl; } ~Base(){ std::cout<<"Base::~Base()"<<std::endl; }};class Base1:public Base{public: Base1(){ std::cout<<"Base1::Base1()"<<std::endl; } ~Base1(){ std::cout<<"Base1::~Base1()"<<std::endl; }};class Derive{public: Derive(){ std::cout<<"Derive::Derive()"<<std::endl; } ~Derive(){ std::cout<<"Derive::~Derive()"<<std::endl; }};class Derive1:public Base1{private: Derive m_derive;public: Derive1(){ std::cout<<"Derive1::Derive1()"<<std::endl; } ~Derive1(){ std::cout<<"Derive1::~Derive1()"<<std::endl; }};int _tmain(int argc, _TCHAR* argv[]){ Derive1 derive; return 0;}运行结果是:Base::Base()Base1::Base1()Derive::Derive()Derive1::Derive1()Derive1::~Derive1()Derive::~Derive()Base1::~Base1()Base::~Base()
------------------------------虚函数----------------------------------------
<span style="font-size:14px;">这里是一个例子:class awov { // awov = "abstract w/o// virtuals"public:virtual ~awov() = 0; // 声明一个纯虚析构函数};</span>
基类是虚函数,派生类自动继承该特性,称为虚函数
0 0
- 面向对象----析构函数、虚函数
- 面向对象c++析构函数
- 面向对象-------虚函数学习
- Php面向对象--构造函数与析构函数
- PHP面向对象——构造函数、析构函数
- 面向对象之构造函数和析构函数之一
- PHP面向对象——构造函数、析构函数
- php面向对象-构造函数和析构函数详解
- php面向对象----构造函数和析构函数
- 面向对象中的构造函数和析构函数
- PHP面向对象-构造函数和析构函数
- php面向对象构造函数、析构函数的作用
- PHP面向对象——构造函数、析构函数
- PHP面向对象中的构造函数和析构函数
- PHP面向对象——构造函数、析构函数
- C++语言--面向对象--2.1--面向对象的四大主要特征、内联函数、析构函数
- 面向对象主函数
- javaScript 面向对象-函数
- [leetcode]Decode Ways
- Android Studio生成Jni头文件的方法
- Android开源项目xUtils HttpUtils模块分析
- 关于如何选择sphinx4和pocketsphinx和一些其他问题
- 使用canvas与Paint在View中居中绘制文字
- 面向对象----析构函数、虚函数
- 最棒的Twisted入门教程
- 调用windows讲述人播放语音
- 将本地文件上传到github
- ios APP审核加速上架服务
- DAO中方法实现
- 黑马程序员——Java基础----IO(概述、字符流、字节流等)(1)
- eclipse 响应慢 或 未响应
- IDFA - 1