Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20544
  • 博文数量: 9
  • 博客积分: 85
  • 博客等级: 民兵
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-30 09:53
文章分类

全部博文(9)

文章存档

2013年(6)

2012年(3)

我的朋友

分类: C/C++

2013-01-25 16:36:14

1.没有派生类的,类的构造函数与析构函数


class Base
{
public:
    Base(){
        i_num = 3;
        i_count = 5;//错误,不能对常量进行赋值
    }
    Base(int i,int j):i_num(i),i_count(j) {
        str= new char[64]; 
    };
    ~Base(){
        delete str;
    };
pravite:
    int i_num;
    const int i_count;
    char* str;
};


构造函数是给数据成员进行初始化或赋值的。既然能够赋值,为什么还要有初始化列表呢?因为,对于const或引用型数据成员,赋值是错误的。初始化这类数据只有在初始化列表中。当自定义构造函数时,默认构造函数不在被调用。

析构函数是为了释放资源。对于从堆上申请的内存,必须自定义析构函数来释放掉这块内存,否则内存泄露。对于其他地方的内存空间有默认析构函数自动释放。当一个对象生命周期结束时,首先调用自定义析构函数,然后再调用默认析构函数。

2.有派生类的,基类和派生类的构造函数与析构函数

构造函数的先后顺序:先调用基类的构造函数,然后再调用派生类的构造函数。

析构函数的先后顺序和构造函数的相反。

派生类的构造函数只能初始化本类成员,不能直接初始化基类成员。基类成员由基类构造函数进行初始化。

下面,让我们看一个virtual 虚构函数的例子。

这样就得出一个结论,当你的基类的析构函数不为虚的话

  • 派生类中所分配的内存将可能泄漏。
  • 派生类中所有的成员变量的类中分配的内存也将可能泄漏。



阅读(248) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~