我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:classClxBase{public:ClxBase(){};virtual~ClxBase(){};virtualvoidDoSomething(){coutD...
分类:
编程语言 时间:
2014-09-04 16:39:49
阅读次数:
140
代码和解释:
#include "stdafx.h"
#include
#include
#include
using namespace std;
class test{
int *p;
public:
test(int value){
p = new int(value);
cout>"<<endl;
cout<<"p的地址为"<<&p<<";p的值为"<<p <<" ...
分类:
编程语言 时间:
2014-09-03 22:46:37
阅读次数:
203
自己实现的一个string类,包括基本构造,复制构造,赋值和析构函数,比较函数,输入输出函数,锻炼一下动手能力。
#include
#include
#include
using namespace std;
class MyString{
public:
MyString(const char *s=NULL);
MyString(const MyString& rh...
分类:
其他好文 时间:
2014-09-01 21:14:13
阅读次数:
218
引用计数的智能指针是对《Effective C++ 条款13:以对象管理资源》的一个实现。我们要设计一个智能指针,使他能够管理资源,在正确的实际调用资源的析构函数。首先我们需要一个指针reference来指向资源,当智能指针构造时,用reference指针指向资源,在我们确定资源应该被析构时,我们对...
分类:
其他好文 时间:
2014-09-01 20:57:53
阅读次数:
319
条款13:以对象管理资源许多资源被动态分配于heap内而后被用于单一区块或函数内。它们应该在控制流离开那个区块或函数时被释放。标准程序库提供的auto_ptr正是针对这种形式而设计的特制产品。auto_ptr是个类指针对象,也就是智能指针,其析构函数自动对其所指对象调用delete。以对象管理资源的...
分类:
编程语言 时间:
2014-08-31 19:59:51
阅读次数:
292
条款05:了解C++默默编写并调用哪些函数编译器默认声明一个default构造函数、一个copy构造函数、一个copy assignment操作符和一个析构函数。这些函数都是public且inline。1 class Empty {2 public:3 Empty() {...}4 ...
分类:
编程语言 时间:
2014-08-31 18:25:41
阅读次数:
225
用智能指针可以简化内存管理。以树为例,如果用普通指针,通常是在插入新节点时用new,在析构函数中调用delete;但有了unique_ptr类型的智能指针,就不需要在析构函数中delete了,因为当unique_ptr类型的指针P生命结束时(比如对于局部变量,程序执行到局部变量的作用域范围之外).....
分类:
编程语言 时间:
2014-08-31 15:38:31
阅读次数:
246
几天前组内一个同事做技术分享,其中谈到一个问题,如果new出一个对象但是delete的时候,如果写成delete[]效果会如何。其中有同事在实际测试中发现如果是debug版本会抛异常,但是Release会反复执行该对象的析构函数。debug版本拋异常很容易理解,本来这么写就不对的,但是Release...
分类:
其他好文 时间:
2014-08-31 10:26:31
阅读次数:
175
1,malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。2,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/...
分类:
其他好文 时间:
2014-08-30 23:01:10
阅读次数:
193
构造函数可以抛出异常。C++标准指明析构函数不能、也不应该抛出异常。那么如果对象在运行期间出现了异常,C++异常处理模型有责任清除那些由于出现异常所导致的已经失效了的对象(也即对象超出了它原来的作用域),并释放对象原来所分配的资源,这就是调用这些对象的析构函数来完成释放资源的任务,所以从这个意义上说...
分类:
其他好文 时间:
2014-08-30 22:56:40
阅读次数:
222