The initialize list of C++ Class

性能问题之外,有些时场合初始化列表是不可或缺的,以下几种情况时必须使用初始化列表

    • 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面
    • Error1(constchar* constmsg) :data(msg)

      {

      //data = msg;

      }

    • 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面
    • 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化。
    • classError2

      {

      constchar* const data;

      public:

      Error2(constchar* constmsg = 0) :data(msg){}//Error2()

      };

      classError1

      {

      constchar* const data;

      Error2 e2;

      public:

      Error1(constchar* constmsg=0) :data(msg)

      {

      // e2 = e2Out;

      //data = msg;

      }

      //Error1(const char* const msg = 0) :data(msg){}

      Error1(constchar* constmsg, Error2 & e2Out) :data(msg), e2(e2Out)

      {

      //e2 = e2Out;

      //data = msg;

      }

      };

      if not, there will be a waring,

      • 但是对于类类型来说,最好使用初始化列表,为什么呢?由上面的测试可知,使用初始化列表少了一次调用默认构造函数的过程,这对于数据密集型的类来说,是非常高效的。同样看上面的例子,我们使用初始化列表来实现Test2的构造函数

        struct Test2
        {
            Test1 test1 ;
            Test2(Test1 &t1):test1(t1){}
        }
    • 使用同样的调用代码,输出结果如下。

      第一行输出对应 调用代码的第一行。第二行输出对应Test2的初始化列表,直接调用拷贝构造函数初始化test1,省去了调用默认构造函数的过程。所以一个好的原则是,能使用初始化列表的时候尽量使用初始化列表。  

时间: 2024-10-12 20:00:56

The initialize list of C++ Class的相关文章

关于延迟加载(lazy)和强制加载(Hibernate.initialize(Object proxy) )

PO 即Persistence Object VO 即Value Object PO 和VO 是Hibernate 中两个比较关键的概念. 首先,何谓VO,很简单,VO 就是一个简单的值对象. 如: TUser user = new TUser(); user.setName("Emma"); 这里的user 就是一个VO.VO 只是简单携带了对象的一些属性信息. 何谓PO? 即纳入Hibernate 管理框架中的VO.看下面两个例子: TUser user = new TUser()

Mapper not initialized. Call Initialize with appropriate configuration.

System.InvalidOperationException:“Mapper not initialized. Call Initialize with appropriate configuration. If you are trying to use mapper instances through a container or otherwise, make sure you do not have any calls to the static Mapper.Map methods

js中 理解 this.initialize.apply ( this, arguments ) 定义对象的方式

var Class = { create:function() { return function() { this.initialize.apply(this, arguments); }; } } var Tool = Class.create(); Tool.prototype = { initialize: function($container){ this.val = 32; }, getVal:function(){ return this.val; }, setVal:funct

Android开发之parseSdkContent failed Could not initialize class android.graphics.Typeface

在进行android开发过程中,忽然发现经常弹出来parseSdkContent failed 这个错误,然后google了下解决办法 方法1: 删除.android文件 重启eclipse. 该方法对我来说还是管用的,确实没有弹出这些东西了.但是在启用SDK Manger或者虚拟机的时候,弹出了parseSdkContent failed Could not initialize class android.graphics.Typeface这个问题,解决google吧. 然后在stackov

struts2 log4j:WARN Please initialize the log4j system properly. 解决方法

在tomcat启动的时候,出现这个警告: log4j:WARN No appenders could be found for logger (org.apache.commons.digester.Digester.sax).log4j:WARN Please initialize the log4j system properly. 解决办法: log4j.properties文件需要放到web-inf/class目录下面,在eclipse里面放到src目录下面,会自动拷贝到class目录下

failed to lazily initialize a collection of role

在springmvc hibernate的映射文件中如图设置多对多关联,为了显示查询的的列表,打印json数据,我们刚开始是这样设置如下的设置文件 然后进行查询操作 结果报 failed to lazily initialize a collection of role错误 假如这样设置 结果就是这样的 正常打印json数据 为什么会这样? 首先,lazy是延时的意思,如果lazy=true,那么就是说数据库中关联子表的信息在hibernate容器启动的时候不会加载,而是在你真正的访问到字表非标

sqoop job local 和 Cannot initialize Cluster 问题

hadoop版本:Hadoop 2.3.0-cdh5.0.0 sqoop版本:Sqoop 1.4.4-cdh5.0.0 配置好sqooop-env.xml: #Set path to where bin/hadoop is available export HADOOP_COMMON_HOME=/my/hadoop #Set path to where hadoop-*-core.jar is available export HADOOP_MAPRED_HOME=/my/hadoop/shar

weblogic 12c下jxls导出excel报错Could not initialize class org.apache.poi.xssf.usermodel.XSSFVMLDrawing

周一,开发反馈weblogic 12c下jxls导出excel报错,公司环境和UAT环境均报错,看日志如下: 2016-06-08 09:16:55,825 ERROR org.jxls.util.TransformerFactory.createTransformer(TransformerFactory.java:40)[org.jxls.util.TransformerFactory] - Method createTransformer of org.jxls.transform.poi

mysql 5.7.12----bin/mysqld --initialize --user=mysql出错

我最近在安装mysql 5.7.12,本来之前安装mysql 5.7.11时用命令 bin/mysqld --initialize --user=mysql 可以很好的初始化,但是用在5.7.12版本居然报错 [[email protected] mysql-5.7.12]# bin/mysqld --initialize --user=mysql2016-04-28T09:50:25.142068Z 0 [Warning] TIMESTAMP with implicit DEFAULT val

解决sever 2008中tomcat的报错 init Failed to initialize end point associated with ProtocolHandler ["http-nio-80"]

错误现象: 01-Aug-2017 14:59:50.140 信息 [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-80"]01-Aug-2017 14:59:50.182 严重 [main] org.apache.coyote.AbstractProtocol.init Failed to initialize end point associated wit