成对使用new和delete时要采取相同形式本节条款知识点在于delete和delete[]的区别
大家都知道在new一个对象的时候要delete一个对象,在new 一个对象数组时要delete[]才是正确的。大家也知道new产生两个行为,一个是申请对象所需内存,另一个是调用类构造函数初始化对象。
那么,delete的行为也有两个,一个是调用对象的析构函数,另一个是回收内存。而new[]是对每个...
分类:
编程语言 时间:
2015-06-24 16:36:28
阅读次数:
147
考虑以下代码 class?Ref
{
public:
virtual?~Ref()
{
cout?<<?"~Ref()"?<<?endl;
}
};
class?People?:public?Ref
{
public:
~People()
{
cout?<<?"~People()"?<<?endl;
}
}; 以下代码输出...
分类:
其他好文 时间:
2015-06-24 14:47:55
阅读次数:
99
以对象管理资源资源的种类很多,动态分配的内存、文件描述器、互斥锁、图像界面中画刷、数据库连接、网络socket等。资源一般是有限的,当你不用时,必须释放。不然就会造成资源浪费,更严重的情况下,非法占有所有资源导致程序崩溃。那么我们怎么样才能合理使用资源?换句话说我们应该怎么样才能做到资源的释放?
本节的核心点是:利用析构函数自动调用机制实现资源的合理释放。举个例子:class Investment...
分类:
编程语言 时间:
2015-06-24 10:59:50
阅读次数:
153
队列是一种限定存取位置的线性表,允许插入的一端叫做队尾(rear),允许删除的一端叫做队首(front)。
队列具有FIFO的性质
队列的存储表示也有两种方式:基于数组的,基于列表的。基于数组的叫做顺序队列,基于列表的叫做链式队列。
一下是基于动态数组的顺序队列的模板类的实现。
顺序队列的抽象基类如下所示:只提供了接口和显式的默认构造函数和析构函数,在派生类中调用。
#i...
分类:
其他好文 时间:
2015-06-23 15:50:28
阅读次数:
191
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free...
分类:
其他好文 时间:
2015-06-23 10:03:39
阅读次数:
109
构造函数是为了让类对象被创建的时候,自动进行初始化,而不是接口使用者自己调用函数去进行初始化。 析构函数是为了让类对象过期时,进行最后的清理工作. 总而言之,就是为了对象被销毁时所调用的函数. 注意:构造函数和析构函数都没有返回值和声明类型 构造函数: 声明方法:1 class_name::cl.....
分类:
其他好文 时间:
2015-06-22 20:45:58
阅读次数:
136
绝不在构造和析构过程中调用virtual函数本节有个核心的知识点就是在构造函数和析构函数中,virtual函数失去多态性。
试想一下,假设此时在构造函数和析构函数中,virtual函数没有失去多态性,会出现什么问题。我们知道构造次序吧,先构造base类部分,再构造derived部分。
那么在base类构造过程中,derived的参数都没有被初始化。virtual函数一旦具...
分类:
编程语言 时间:
2015-06-22 13:44:44
阅读次数:
155
为多态基类声明virtual析构函数本节重点大家只要明白为什么要声明析构函数为virtual函数,即声明virtual析构函数的意义。我们知道,析构函数的作用就是实现多态polymorphic。那么如果我们动态创建一个derived派生类,由基类指针接受该派生类地址。那么我们如何释放这个派生类的内存?
如下代码:class A
{
//...........
};class B:public A...
分类:
编程语言 时间:
2015-06-22 11:11:57
阅读次数:
123
别让异常逃离析构函数为什么别让异常逃离析构函数,异常逃离析构函数会引发哪些问题?很明显,异常会带来不明确的行为。
如下代码:
当容器销毁时会调用析构函数,这时如果析构函数抛出异常,容器中剩余的元素还是应该被销毁,否则可能会有内存泄露。这时如果继续销毁其他元素,又出现异常的话,会同时存在两个异常。两个异常同时存在会导致不明确的行为。使用标准库的其他容器或TR1的任何容器或者array,也会遇到类似...
分类:
编程语言 时间:
2015-06-22 11:09:29
阅读次数:
232
Since I choose this road, I will not regret it. --Mereyct端午过后的第二天,闲着没事,更新一下博客。写这个博客的原因是,看到了群里有人问调用构造函数时能成功,调用析构函数却失败了。他在群里问大家问题,...
分类:
编程语言 时间:
2015-06-21 14:22:08
阅读次数:
143