摘要:
Stackoverflow中提出了这样一个问题:假设我们实现了一个User类,Library类,现在Library类中utility需要回调User中func方法,总结答案,常见的几种方法如下: 下面则是非常规方法。 基于tag dispatch的调用方法,利用空类实现标签回调,在注册方法时提供不同 阅读全文
2017年5月25日
2017年3月29日
摘要:
在C++中,隐式转换主要涉及以下情况: 1)形参对象传递 此时C++需通过临时变量将对象转换为引用后传递,如: 2)返回值传递 3) 类型隐式转换,此种情况如下: 综合测试程序如下: 阅读全文
2016年12月18日
摘要:
C++一个对象构造的完整过程为:分配内存和初始化,这也是new关键字所实现的功能,分配内存可通过重载new操作符来实现,系统初始化可通过调用构造函数来完成。我们不能改变new关键字的功能,但可以改变分配内存的方式。 new操作符的重载默认有一个分配内存大小的形参,但可根据实际需要来增加新的参数。 这 阅读全文
摘要:
C++中的捕获异常机制catch参数中实参的类型不同,采取的处理方式则不相同,且与普通的函数调用还不一样,具体表现为当抛出异常throw A()或throw obj时,对象会进行一次额外的对象复制操作。 测试类实现如下: 1) 当采用对象传递方式捕获异常时,在对象中会发生两次复制操作,一次为对象a复 阅读全文
2016年7月1日
摘要:
在实际开发项目中,我们通常将一个工程划分为多个文件夹,每个文件夹代表不能的功能,如:我的一个项目cpl,它分为两个文件夹:src和test。当在cpl文件夹中运行make的时候,它的一级目录都会自动运行各自文件夹中的Makefile,cpl文件夹中的Makefile需要定义一些编译变量,如:包含的库 阅读全文
2016年5月8日
摘要:
深入理解C++中第七章提到模板实例化参数的选择:函数的决议结果只和函数参数有关和返回值无关。记录一下。 测试程序如下: 测试结果如下: int foo double foo 当模板有实例化具体类型时,才产生具体的对象类图: 阅读全文
摘要:
C++中对象数组创建时,主要注意的点有:虚函数和带参数的构造函数,当出现虚函数时,对象数组中如通过父对象指向子对象,因为需要做Slice,析构时会造成指针错误引发内存泄露。测试程序如下: 如出现下列方式使用对象: A *pa = new B[2]; delete[] pa; Valgrind检测会造 阅读全文
2016年4月20日
摘要:
在涉及到虚函数的情况下,C++构造函数的构造顺序为:先调用构造函数,虚表指针初始化,用户代码;如涉及到多重继承情况,初始化顺序为基类、子类(从左至右),假设一个类的继承情况如下图,其初始化顺序为:Point,Point3d,Vertex,Vertex3d,PVertex,而这样的调用顺序说明在构造函 阅读全文
2015年10月15日
摘要:
C++多重继承下,对象布局与编译器,是否为虚拟继承都有很大关系,下面将逐一分析其中的差别,相同点为都按照类继承的先后顺序布局(类内按照虚表、成员声明先后顺序排列)。该类情况为子类按照继承顺序排列,如class C:public B,public A此种情况布局如下:如果class B,A带有虚函数,... 阅读全文
2015年8月9日