#include <iostream>
using namespace std;
class A
{
public:
A() { cout <<
"A::this = " <<
this <<
endl; };
/*virtual*/ ~A() {}
// virtual 1
public:
int a;
};
class B :
/*virtual */public A
// virtual 2
{
public:
B() { cout <<
"B::this = " <<
this <<
endl; };
~
B() {}
public:
int b;
};
class C :
/*virtual */public A
// virtual 2
{
public:
C() { cout <<
"C::this = " <<
this <<
endl; }
~
C() {}
public:
int c;
};
class D :
public B,
public C
{
public:
D() { cout <<
"D::this = " <<
this <<
endl; }
~
D() {}
public:
int d;
};
int main()
{
/*
** 这里可以看出this发生了一定的偏移
** 分别去掉virtual 1和virtual 2的注释,偏移会发生什么变化?
*/
D * p =
new D();
delete p;
cout <<
"*************" <<
endl;
/*
** static_cast转换,会和派生类的this指针相等
** 强制转换呢?
** 可以转换成(A *)?
*/
B * pB = static_cast<B *>(p);
//(B *)p;
cout << pB <<
endl;
C * pC = static_cast<C *>(p);
//(C *)p;
cout << pC <<
endl;
//A * pA = static_cast<A *>(p);
//cout << pA << endl;
return 0;
}
本人机子(XP+VS2008)上,运行结果为:
调试状态下,可以看到D的内存结构,不妨以此来理解this指针的偏移。
参考资料:
1.http://hi.baidu.com/jsunhj/blog/item/83b51c510778537584352404.html
转载于:https://www.cnblogs.com/c007136/archive/2012/05/29/2524279.html
相关资源:各显卡算力对照表!