this指针在new完对象以后发生改变了
this指针在new完对象之后发生改变了
事故现场描述如下:
现在又一个task类,这个task类继承了3个父类,如下:
已知这三个父类都有虚函数,然后在task这个类中会实现这3个类的虚函数
现在在task.start()这个函数中会new一个对象,然后把task的this指针传递给它,例如:
D* pD = new D(this);
然后我在D的构造函数中打印this的值,并且在start之后打印this的值,如下所示:
在task.start这个函数中表明this的值等于0x7f0d20001a80
在D的构造函数中打印出来的this的值等于0x7f0d20001ac8
然后我觉得这种行为很奇怪哈,就在task.start函数中加了一行打印,打出了dynamic_cast<C*>(this)的值,
发现就等于0x7f0d20001ac8,请问这是为什么?
也是奇葩了
------解决思路----------------------
那只能传的是C的地址了,而不是task的,你试着将C*改为task *,就是task的地址了;
指针也是有类型的
------解决思路----------------------
你可以测试下 task * ptr = new task;
A* p_a = ptr;
B*p_b = ptr;
C* p_c = ptr;
然后你分别输出 p_a,p_b,p_c里面包含的地址
事故现场描述如下:
现在又一个task类,这个task类继承了3个父类,如下:
class task
:public A
,public B
,public C
{};
已知这三个父类都有虚函数,然后在task这个类中会实现这3个类的虚函数
现在在task.start()这个函数中会new一个对象,然后把task的this指针传递给它,例如:
D* pD = new D(this);
然后我在D的构造函数中打印this的值,并且在start之后打印this的值,如下所示:
在task.start这个函数中表明this的值等于0x7f0d20001a80
在D的构造函数中打印出来的this的值等于0x7f0d20001ac8
然后我觉得这种行为很奇怪哈,就在task.start函数中加了一行打印,打出了dynamic_cast<C*>(this)的值,
发现就等于0x7f0d20001ac8,请问这是为什么?
也是奇葩了
------解决思路----------------------
那只能传的是C的地址了,而不是task的,你试着将C*改为task *,就是task的地址了;
指针也是有类型的
------解决思路----------------------
你可以测试下 task * ptr = new task;
A* p_a = ptr;
B*p_b = ptr;
C* p_c = ptr;
然后你分别输出 p_a,p_b,p_c里面包含的地址