C++默认构造函数

本文纠正了关于C++默认构造函数的两个常见误解,并详细解释了何时编译器会生成非平凡的默认构造函数:1) 数据成员有有用默认构造函数;2) 继承自带有默认构造函数的基类;3) 类包含虚函数;4) 类有虚基类。这些情况下,编译器合成的默认构造函数会执行特定的初始化操作。
摘要由CSDN通过智能技术生成

最近在看《深度探索C++对象模型》,看的头大。对于c++默认构造函数,一直有两个错误的认识。

1,没有定义默认构造函数的类都会被编译器生成一个默认构造函数。

2,编译器生成的默认构造函数会初始化所有数据成员。

而lippman在书中告诉我们 以上两个理解是错误的。

先看第2条,举个例子。

#include <iostream>
using namespace std;
class Base {
    public:
        ~Base() {}
        int val;
};
int main()
{
    Base b;
    cout << b.val << endl;
    return 0;
}
编译运行上述代码,可以得到结果  -1218625548, 显然这是未初始化。所以编译器生成的默认构造函数并不初始化所有成员,比如int,char等。

C++标准规定:如果类的设计者并未为类定义任何构造函数,那么会有一个默认 构造函数被暗中生成,这个暗中生成的默认构造函数通常是不做什么事的,而我们通常所说的默认构造函数是有用的,也就是所谓的 nontrivial default constructor。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值