小编Ser*_*dir的帖子

C++是否会生成一个新对象?

如上面的标题所示,我的问题是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)

c++ casting

6
推荐指数
2
解决办法
4294
查看次数

标签 统计

c++ ×1

casting ×1