构造函数中的this指针

-------------------------------原理-------------------------------

某些人认为不应该在构造函数中使用this指针,因为这时this对象还没有完全形成。

但是,只要小心,是可以在构造函数中使用this指针的:

●在函数体中

●初始化列表中

因为“对象还没有完全形成”不意味着“什么都没有”。

在进入构造函数(及其chaining)之前,Compiler会:

●给class的instance分配内存

●建立运行时刻系统所需的信息(如vtbl等)

●##缺省地## 构造所有类成员


-----------------------------【能】---------------------------------

构造函数的函数体(或构造函数所调用的函数)【能】可靠地访问:

●基类中声明的数据成员

●构造函数所属类声明的数据成员

这是因为所有这些数据成员被保证在构造函数函数体开始执行时已经被完整的建立。

-----------------------------【不能】---------------------------------

构造函数的函数体(或构造函数所调用的函数)【不能】向下调用:

●被派生类重定义的虚函数

这是因为在基类的构造函数执行期间,“对象还不是一个派生类的对象”。

---------------------------【有时】-----------------------------------

以下是【有时】可行的:

时间: 2024-11-04 14:22:50

构造函数中的this指针的相关文章

内存陷阱:驯服C++中的野指针

什么是野指针? 一个母亲有两个小孩(两个指针),一个在厨房,一个在卧室,(属于不同的代码块,其生存期不同)母亲让在厨房的小孩带一块蛋糕(指针指向的对象)给在卧室的小孩,这样在卧室的孩子才肯写作业.但这个在厨房的小孩比较淘气,他在走出厨房时自己将蛋糕吃了,没能带出来.而在卧室的没有吃到蛋糕,所以不肯完成他的作业.结果母亲却不知道卧室的孩子没有吃到蛋糕,还以为作业完了.结果第二天她就被老师召唤到办公室了.事情麻烦了. 这样,那个在卧室的孩子就是野指针了,因为他没有得到应得的蛋糕,不能完成母亲交给他的

c++-C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组?

问题描述 C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组? 写了这样一个类: class Base{ private: int r[MAX_SIZE]; int length; public: Base() { r[MAX_SIZE] = {1,2,0,5,8,9,7,3,6,4}; //编译的时候在这边出错 length = 10; } void swap_data(int,int); void Show(const Base &ob); friend int Bubble

详解C++中的this指针与常对象_C 语言

C++ this指针详解 this 是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址).通过 this,可以访问当前对象的成员变量和成员函数. 所谓当前对象,就是正在使用的对象,例如对于stu.say();,stu 就是当前对象,系统正在访问 stu 的成员函数 say(). 假设 this 指向 stu 对象,那么下面的语句中,this 就和 pStu 的值相同: Student stu; //通过Student类来创建对象 Student *pStu = &s

C++编程规范之48:在构造函数中使用初始化代替赋值

摘要:     设置一次,到处是用:在构造函数中,使用初始化代替复制来设置成员变量,能够防止发生不必要的运行时操作,而输入代码的工作量则保持不变.     构造函数会在系统内部生成初始化代码.考虑如下代码: class Employee { string firstName, lastName; public: Employee(){ firstName ="Leo"; lastName = "Chu" } };     实际上,生成的构造函数代码将类似于: Emp

为什么不能再构造函数中执行大量的内存分配、文件读写等复杂操作??

问题描述 为什么不能再构造函数中执行大量的内存分配.文件读写等复杂操作?? 大婶们啊:为什么不能再构造函数中执行大量的内存分配.文件读写等复杂操作??? 解决方案 可以啊!谁告诉你不行的? 只是在构造函数做太复杂的操作,当出错时发现错误有时会很困难.特别是定义为全局变量时,程序还没有运行.就出错了. 解决方案二: 构造函数主要进行一些初始化工作,复杂的工作放到成员函数中处理,这样比较符合OOP设计 解决方案三: 以牺牲对象分配的时间来换取代码的简单行· 是可以的·! 但是不推荐 解决方案四: 这

通过CSS让网页中的鼠标指针一直都是手形

如何让网页中的鼠标指针一直都是手形呢?很简单,在网页body上方加入如下的CSS代码就OK了,试试吧. <style type="text/css"><!--body{cursor:pointer;}--></style> 以下是HTML网页特效代码,点击运行按钮可查看效果: [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

浅析C++中的this指针

有下面的一个简单的类: class CNullPointCall{public: static void Test1(); void Test2(); void Test3(int iTest); void Test4();private: static int m_iStatic; int m_iTest;}; int CNullPointCall::m_iStatic = 0; void CNullPointCall::Test1(){ cout << m_iStatic <<

C++中的函数指针与函数对象的总结

以下是对C++中的函数指针与函数对象的使用进行了详细的分析介绍,需要的朋友可以参考下   篇一.函数指针函数指针:是指向函数的指针变量,在C编译时,每一个函数都有一个入口地址,那么这个指向这个函数的函数指针便指向这个地址. 函数指针的用途是很大的,主要有两个作用:用作调用函数和做函数的参数. 函数指针的声明方法:数据类型标志符 (指针变量名) (形参列表): 一般函数的声明为: int func ( int x );而一个函数指针的声明方法为:int (*func) (int x);前面的那个(

qlabel-Qt如何获取窗口中的部件指针

问题描述 Qt如何获取窗口中的部件指针 我在窗口中定义了64个QLabel作为8乘8的矩阵,每个Label的名字都不同,现在我想 在一个按钮的槽函数里面获取某个特定的Label,比如对比数据知道第二行第三列的 Label需要改变Text,那么经过运算这是"Label-11"那么我想获取这个Label的 指针,我发现使用this->findChild("Label-11")不行,获取不到,我应该怎么获 取到呢? 解决方案 QList<QLabel *>