构造函时和this指针
通常this指针在对象构造完毕后才完全生成,而在构造函数执行过程中,对象还没有完全生成,所以this指针也是没有完全生成的,在构造函数中使用this指针会存在问题,应该尽量避免。
构造函数中可以访问对象中已经初始化的成员(成员初始化是有顺序的),但尽量不要调用对象方法,因为调用方法的时候会隐含使用this指针。
在某些应用中会存在这样的对象,他的成员变量需要用对象的this指针进行初始化:
class A
{
B b;
}; class B
{
A* a;
};
A类的构造函数可以写成:
A(): b(this)
这样会违反构造函数中尽量不使用this指针的规范,一种替代的方法是,在A类中增加Init方法,在此方法中设置B的成员变量值为A对象的this指针,Init方法在A对象构造完后调用,从而this指针是完整的:
class A
{
B b; A()
{
} void Init()
{
b.SetMemberA(this);
}
}; class B
{
A* a; void SetMemberA(A* pa)
{
a = pa;
}
};
构造函时和this指针的更多相关文章
- 对象布局已知时 C++ 对象指针的转换时地址调整
在我调试和研究 netscape 系浏览器插件开发时,注意到了这个问题.即,在对象布局已知(即对象之间具有继承关系)时,不同类型对象的指针进行转换(不管是隐式的从下向上转换,还是强制的从上到下转换)时 ...
- C语言学习笔记(一):数组传递时退化为指针
这几天闲来无事,写了一个数组元素排序函数如下: #include <stdio.h> #include <stdlib.h> void ArraySort(int array[ ...
- 记录最近在使用sprintf构造字符串时遇到的一个问题
直接上代码: #include "stdio.h" #include "string.h" int main() { char szTmp[20] = {0}; ...
- C++——继承时的this指针
1.this指针只在类的成员函数中使用,当类的成员函数需要用到自己的指针时就要用到this指针.但静态函数不能使用this关键字,其解释是:因为this是个引用,哪个对象调用方法就引用哪个对象. 而静 ...
- 访问cv::Mat中的数据时遇到的指针类型问题
在用Opencv的时候由于下图原本的图像尺寸是1111*1111,要进行resize,代码如下: cv::Mat img = cv::imread("//Users//apple//td3/ ...
- C语言提高 (4) 第四天 数组与数组作为参数时的数组指针
1昨日回顾 const int 和 int const是一样的 const char *p;值不变 char * const p; 指针不能变 编译器对参数的退化: 第三种模型: 三级指针 三级指针局 ...
- c++ 子类,基类 中this指针 虚函数使用
笔记: 子类和基类 构造函数不显式时,的this指针相同..在QT中,如果父类基于QObject,那么构造子类时传入this指针,这样所有子类,父类,基类都是同一地址.delelater(),会del ...
- C++与C#对比学习:类初始化
类和柏拉图的理念世界 我们知道面向对象编程中到处是一个个的类,但类只是个概念性的东西,不是个实体,不占内存,你没实例化之前也不能用它.只有把类实例化成一个对象后,它才是一个真正存在的实体.占有内存,能 ...
- 胖哈勃杯Pwn400、Pwn500详解
概述 这次的胖哈博杯我出了Pwn400.Pwn500两道题目,这里讲一下出题和解题的思路.我个人感觉前两年的Pwn题更多的是考察单一的利用技巧,比我这有个洞怎么利用它拿到权限.但是我研究了一些最近的题 ...
随机推荐
- Theme.AppCompat.Light报错
style文件中的Theme.AppCompat.Light报错,Error retrieving parent for item: No resource found that matches th ...
- 不重启mysqld更改root密码
Ever found yourself working on a MySQL server where root’s password is unavailable? It has happened ...
- bash及其特性(笔记)
bash及其特性:shell: 外壳GUI:Gnome, KDE, XfceCLI: sh, csh, ksh, bash, tcsh, zsh root, student程序:进程 进程:在每个进程 ...
- Change the ball(找规律)
Change the ball Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- cocos2dx CCControlButton button大事
=================================.cpp文件 <pre name="code" class="cpp">bool ...
- 启动tomcat后struts框架报异常严重: Exception starting filter struts2 Unable to load configuration. - Class: java.net.PlainSocketImpl
今天刚好宿舍断网,打开电脑,打开ide工具,启动tomcat后,访问web项目工程,页面显示404,查看控制台,运行报错信息如下: 严重: Exception starting filter stru ...
- Java - 反射机制(Reflection)
Java - 反射机制(Reflection) > Reflection 是被视为 动态语言的关键,反射机制允许程序在执行期借助于 Reflection API 取得任何类的 ...
- 实现接口IDisposable的示例
想使用using(...), 如: using (Getter process = new Getter()) { //... } 就必须给类实现接口IDisposable public sealed ...
- JS实现给页面表单设置触发默认按钮
var defaultBtnId; function setDefaultButton(id) { defaultBtnId = id; } document.onkeydown = function ...
- 使用 Camtasia Recorder显示 “ camtasia an error occurred in the recorder: video codec open failed ”
这是因为本机没有codec的缘故,可以下载一个:tscc解码器(TechSmith Screen Capture Codec) 2.0.3.0 安装版 http://www.cngr.cn/dir/2 ...