【发布时间】:2014-09-27 13:22:15
【问题描述】:
struct D
{
virtual void m() const = 0;
};
struct D1 : public virtual D { };
struct D2 : public virtual D { };
struct B : public D2
{
B() { }
B(int val) : B() { }
void m() const { }
};
struct A : public B, public D1
{
A() : B(0) { }
};
int main()
{
A a;
return 0;
}
我在上面的代码中使用 MSVC 2013 编译器崩溃了。使用 GCC 4.7.2 编译时,它运行时不会崩溃。类的层次结构如下所示。
D
/ \
D1 D2
| |
\ B
\ /
A
这是MS编译器的错误还是我在代码中犯了错误?
【问题讨论】:
-
据我所见,
A a;而不是D* d = new A;也表现错误。 -
它也可以在带有 Clang 的 Mac OS 上运行。如果您真的想全面诊断,您可能需要生成汇编代码并深入研究。
-
很好奇..现在我必须获得 vs 2013 才能尝试
-
@singh,这只是构造函数的委托。它应该是合法的。
标签: c++ visual-c++ c++11 virtual-inheritance delegating-constructor