zoukankan      html  css  js  c++  java
  • C++默认构造函数的一点说明

    大多数C++书籍都说在我们没有自己定义构造函数的时候,编译器会自动生成默认构造函数。其实这句话我一直也是

    深信不疑。但是最近看了一些资料让我有了一点新的认识。

    其实我觉得大多数C++书籍之所以这样描述其实是玩了文字游戏的。如果说编译器自动产生的默认构造函数对于我们

    的类没有任何作用,也就是说在编译器默认生成的这个构造函数里根本没有任何实质性的代码工作,那么这种默认构

    造其实是可有可无的,所以不妨说编译器其实是为每个类生成了默认构造函数的。

    在深度探索C++对象模型中讲了四种关于编译器自动生成默认构造函数的情况,在这四种情况下生成的默认构

    造函数里面是由实质的隐含代码操作的:

    1.如果类A成员中含有某个类B的对象,恰好类B也显示定义了构造函数,那么在产生类A对象的时候编译器会产

    生一个默认构造函数,在这个默认构造函数中提供了调用类A构造函数的代码。

     

    2.如果类B继承于类A,且类A显示定义了构造函数,那么在生成类B对象的过程中编译器同样会产生一个默认构

    造函数,在这个构造函数中提供调用基类A构造函数的代码。

     

    3.如果某个类含有虚函数,那么编译器会自动产生一个默认构造函数以提供虚表指针相关的初始化操作。

     

    4.如果一个类虚继承于其他类,那么同样的编译器会为该类产生默认的构造函数。

    除以上四种情况,编译器都不产生默认构造函数,因为就算编译器产生了默认构造函数,然而在该默认构造函数中没

    有实质的内容,那么这个默认构造函数也就是没存在的意义的,那么我们说编译器不产生也无妨吧。

  • 相关阅读:
    odoo11 审批流中行总额与申请单总额的计算问题
    odoo11 systemd service自动启动配置
    odoo11登录之后返回的session信息分析
    odoo 11 配置nginx反向代理
    odoo 11 之signup_with_phone模块分析
    Ionic1 环境破坏后程序重新恢复过程
    odoo11 安装python ldap
    记上海技术交流会之行备忘录(superset与odoo整合)
    C# 函数式编程:LINQ
    如何在 ASP.NET Core 测试中操纵时间?
  • 原文地址:https://www.cnblogs.com/vpoet/p/4691751.html
Copyright © 2011-2022 走看看