`
banxi1988
  • 浏览: 151988 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

虚析构函数作用示例

    博客分类:
  • C++
阅读更多
关于虚析构函数作用示例.
首先是一个main方法驱动头文件如下:
#include "TestVirtualDestructor.h"

int main() {

	 Person *person = new Student;
	 delete person;

	return 0;
}
/**
 * 输出结果:
 *
 *1.没有使用虚析构函数的时候的输出:子类的析构函数没有调用.
调用Person的构造函数.
调用Student的构造函数.
调用Person的析构函数.
 */


相关的类文件如下:
/*
 * TestVirtualDestructor.h
 *
 *  Created on: 2011-10-12
 *      Author: banxi1988
 */
#include "common.h"

class Person{
public:
	Person(){
		cout<<"调用Person的构造函数."<<endl;
	};
	~Person(){
		cout<<"调用Person的析构函数."<<endl;
	}
};
class Student:public Person{
public:
	Student(){
		ptr = new int;
		cout<<"调用Student的构造函数."<<endl;
	}
	~Student(){
		delete ptr;
		cout<<"调用Student的析构函数."<<endl;

	}
private:
	int *ptr;
};


这个时候的输出结果,可以很明显的看出没有调用子类的析构函数.
而在子类也而在删除person实例时,其实需要释放它在堆上生成的一个ptr.
.

我们将~Person声明为virtual ~Person之后运行结果如下:
/**
 *
调用Person的构造函数.
调用Student的构造函数.
调用Student的析构函数.
调用Person的析构函数.

 */


所以析构函数,还是用虚的总是好的.
所以代码重构如下:
/*
 * TestVirtualDestructor.h
 *
 *  Created on: 2011-10-12
 *      Author: banxi1988
 */
#include "common.h"

class Person{
public:
	Person(){
		cout<<"调用Person的构造函数."<<endl;
	};
	 virtual ~Person(){
		cout<<"调用Person的析构函数."<<endl;
	}
};
class Student:public Person{
public:
	Student(){
		ptr = new int;
		cout<<"调用Student的构造函数."<<endl;
	}
	virtual ~Student(){
		delete ptr;
		cout<<"调用Student的析构函数."<<endl;

	}
private:
	int *ptr;
};

分享到:
评论

相关推荐

    虚析构函数示例

    虚析构函数示例 c++析构函数是否是虚函数时的差别,敬请留意

    详解C++中虚析构函数的作用及其原理分析

    主要介绍了C++中虚析构函数的作用及其原理分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    C++实验1-13,包含完整程序、注释、报告

    实验5-构造函数与析构函数的编程 实验6-利用静态成员编程 实验7-利用友元编程 实验8-继承和派生的编程 实验9-利用多态编程 实验10-运算符重载编程 实验11- 利用模板编程 实验12-利用文件编程 实验13- 面向对象综合...

    C++ 语法详解

    C++整型、字符型、浮点型、声明、定义、typedef、运算符、表达式、左值、选择语句、循环语句、指针、数组、函数和标识符的作用域、类基础、类作用域及相关运算符、构造函数、复制构造函数、析构函数、名称空间、类中...

    C++入门指南-v2.4.pdf

    3.4 C++类的构造函数与析构函数 39 3.5 对象数组 47 3.6 this指针 50 3.7 static静态成员变量 52 3.8 static静态成员函数 53 3.9 const成员变量和成员函数 55 3.10 const对象(常对象) 56 3.11 友元函数和友元类 58 ...

    Visual C++ 2005入门经典.part08.rar (整理并添加所有书签)

    9.6.7 虚析构函数 9.7 类类型之间的强制转换 9.8 嵌套类 9.9 C++/CLI编程 9.9.1 C++/CLI类的继承 9.9.2 接口类 9.9.3 定义接口类 9.9.4 类和程序集 9.9.5 被指定为new的函数 9.9.6 委托和事件 9.9.7 引用类的析构...

    Visual C++ 2005入门经典.part04.rar (整理并添加所有书签)

    9.6.7 虚析构函数 9.7 类类型之间的强制转换 9.8 嵌套类 9.9 C++/CLI编程 9.9.1 C++/CLI类的继承 9.9.2 接口类 9.9.3 定义接口类 9.9.4 类和程序集 9.9.5 被指定为new的函数 9.9.6 委托和事件 9.9.7 引用类的析构...

    Visual C++ 2005入门经典.part07.rar (整理并添加所有书签)

    9.6.7 虚析构函数 9.7 类类型之间的强制转换 9.8 嵌套类 9.9 C++/CLI编程 9.9.1 C++/CLI类的继承 9.9.2 接口类 9.9.3 定义接口类 9.9.4 类和程序集 9.9.5 被指定为new的函数 9.9.6 委托和事件 9.9.7 引用类的析构...

    Visual C++ 2005入门经典.part09.rar (整理并添加所有书签)

    9.6.7 虚析构函数 9.7 类类型之间的强制转换 9.8 嵌套类 9.9 C++/CLI编程 9.9.1 C++/CLI类的继承 9.9.2 接口类 9.9.3 定义接口类 9.9.4 类和程序集 9.9.5 被指定为new的函数 9.9.6 委托和事件 9.9.7 引用类的析构...

    Visual C++ 2005入门经典.part06.rar (整理并添加所有书签)

    9.6.7 虚析构函数 9.7 类类型之间的强制转换 9.8 嵌套类 9.9 C++/CLI编程 9.9.1 C++/CLI类的继承 9.9.2 接口类 9.9.3 定义接口类 9.9.4 类和程序集 9.9.5 被指定为new的函数 9.9.6 委托和事件 9.9.7 引用类的析构...

    Visual C++ 2005入门经典.part05.rar (整理并添加所有书签)

    9.6.7 虚析构函数 9.7 类类型之间的强制转换 9.8 嵌套类 9.9 C++/CLI编程 9.9.1 C++/CLI类的继承 9.9.2 接口类 9.9.3 定义接口类 9.9.4 类和程序集 9.9.5 被指定为new的函数 9.9.6 委托和事件 9.9.7 引用类的析构...

    易学C++(简单易懂的讲解)

    c++入门,简单快捷,很适合c++初学者 ...多态性……231 17.7多态与虚函数……231 17.8虚函数与虚析构函数……236 17.9抽象类与纯虚函数……238 17.10 多重继承……241 习题……242 第十八章再谈输入与输出……261

    C++ Primer第四版【中文高清扫描版】.pdf

    15.4.4 虚析构函数 495 15.4.5 构造函数和析构函数中的虚函数 497 15.5 继承情况下的类作用域 497 15.5.1 名字查找在编译时发生 498 15.5.2 名字冲突与继承 498 15.5.3 作用域与成员函数 499 15.5.4 虚函数与作用域 ...

    visualC++2010入门经典源代码

    8.1.3 析构函数与动态内存分配 366 8.2 实现复制构造函数 369 8.3 在变量之间共享内存 370 8.3.1 定义联合 371 8.3.2 匿名联合 372 8.3.3 类和结构中的联合 372 8.4 运算符重载 373 …… 第9章 类继承和虚...

    [Visual.C++.2010入门经典(第5版)].Ivor.Horton.part1

    8.1.3 析构函数与动态内存分配 366 8.2 实现复制构造函数 369 8.3 在变量之间共享内存 370 8.3.1 定义联合 371 8.3.2 匿名联合 372 8.3.3 类和结构中的联合 372 8.4 运算符重载 373 …… 第9章 类继承和虚函数 第10...

    现代C++程序设计

    8.4.4 基类和派生类的析构函数 8.4.5 医生也是人 8.4.6 关于派生类和基类构造函数的规则 8.5 多态和虚函数 8.5.1 多态——同一个接口,不同的行为 8.5.2 什么是虚函数 8.5.3 虚函数的作用 8.6 总结 8.7 练习 复习题...

    【全新正版】现代C++程序设计(原书第2版)

    8.4.4 基类和派生类的析构函数 8.4.5 医生也是人 8.4.6 关于派生类和基类构造函数的规则 8.5 多态和虚函数 8.5.1 多态——同一个接口,不同的行为 8.5.2 什么是虚函数 8.5.3 虚函数的作用 8.6 总结 8.7 练习 复习题 ...

    Visual C++ 2005入门经典--源代码及课后练习答案

    9.6.7 虚析构函数 476 9.7 类类型之间的强制转换 481 9.8 嵌套类 482 9.9 C++/CLI编程 485 9.9.1 C++/CLI类的继承 486 9.9.2 接口类 492 9.9.3 定义接口类 492 9.9.4 类和程序集 496 9.9.5 被指定...

    Absolute C++中文版(原书第2版)-完美的C++教程,文档中还包含英文版

    14.2.2 派生类的析构函数 426 14.2.3 保护继承和私有继承 436 14.2.4 多继承 437 第15章 多态与虚函数 442 15.1 虚函数基础 442 15.1.1 后绑定 442 15.1.2 C++中的虚函数 443 15.1.3 抽象类和纯虚函数 448 ...

Global site tag (gtag.js) - Google Analytics