C++
文章平均质量分 71
「已注销」
这个作者很懒,什么都没留下…
展开
-
Inside the c++ object model读书笔记之拷贝构造函数(一)
在C++中,会有三种情况以一个对象作为另一个对象的初值,分别为:1. class X{…};X x;X xx = x;2.void fun(X x);X xx;Fun(xx);3. X fun(){ Xxx; return xx;}在以上三种情况中,编译器会在必要的时候合成拷贝构造函数。那么何为必要的时候呢?首先看这样一种情况:原创 2014-03-21 00:43:50 · 937 阅读 · 0 评论 -
Inside the c++ object model读书笔记之程序转换
一、明确的初始化操作:X x0;void foo(){ X x1(x0); X x2 = x0; X x3 = X(x0);}对于该程序,必要的程序转换有两个阶段:1. 重写每一个定义,将初始化的代码给剥夺;2. 安插拷贝构造函数。可能程序转换后为:void foo(){ //剥夺初始化的操作 X x1; X原创 2014-04-01 22:43:13 · 875 阅读 · 0 评论 -
Inside the c++ object model读书笔记之拷贝构造函数(二)
在上一篇中提到编译器会在需要的时候合成一个拷贝构造函数,有以下四种情况如果没有提供显示的拷贝构造函数,编译器会合成一个构造函数,来完成一些必要的操作:1.在一个类中,有一个类成员变量,且这个这个成员变量的类中提供了一个拷贝构造函数(此处的构造函数可以是显式声明的也可以是编译器合成的),这时候会需要编译器来合成一个拷贝构造函数,以便调用成员变量的类中的拷贝构造函数class Base{p原创 2014-03-22 01:20:09 · 957 阅读 · 0 评论 -
Inside the c++ object model读书笔记之拷贝构造函数(三)
在上篇文章中总共说有四种情况,如果没有显式的声明拷贝构造函数,编译器就需要合成一个拷贝构造函数,前面介绍了两种情况,分别是有数据成员为类对象,且该类有拷贝构造函数和继承自有拷贝构造函数的类。接着介绍剩下的两种情况。3.首先,我们知道如果一个类含有虚函数,那么在编译时期,编译器需要做两个扩充操作:a.生成一个虚函数表来存放虚函数的地址b.安插一个指向虚函数表的指针(vptr)那么当一原创 2014-03-23 23:33:24 · 851 阅读 · 0 评论 -
Inside the c++ object model读书笔记之默认构造函数
C++中在类实例化一个对象时,类的构造函数会被“自动调用”,从而完成对象的一些初始化工作。如果类没有提供显式的构造函数,我们就认为编译器会构造一个默认构造函数,而在C++annotated reference manual中告诉我们,默认构造函数会在“需要的时候”被编译器产生出来,那么何时为“需要的时候”呢?接下来就介绍一下“需要的时候”:1. 当一个类A有成员变量为另一个类B的对象时(mem原创 2014-03-25 00:08:14 · 821 阅读 · 0 评论