如上面的标题所示,我的问题是C++强制转换是否确实创建了目标类的新对象.当然,在问这个问题之前,我使用过谷歌,MSDN,IBM和stackoverflow的搜索工具,但是我找不到合适的答案.
让我们考虑使用虚拟继承解决钻石问题的以下实现:
#include <iostream>
#include <cstdlib>
struct A
{
int a;
A(): a(2) { }
};
struct B: virtual public A
{
int b;
B(): b(7) { }
};
struct C: virtual public A
{
int c;
C(): c(1) { }
};
struct END: virtual public B, virtual public C
{
int end;
END(): end(8) { }
};
int main()
{
END *end = new END();
A *a = dynamic_cast<A*>(end);
B *b = dynamic_cast<B*>(end);
C *c = dynamic_cast<C*>(end);
std::cout << …Run Code Online (Sandbox Code Playgroud)