【发布时间】:2014-06-12 14:46:21
【问题描述】:
我很好奇 dynamic_cast 如何将数组的元素转换为更大的类(它会转移所有其他元素吗?)。所以我写了一个小代码来尝试一下。但是当它编译但第一行出现段错误时,我感到很惊讶。为什么?
#include <iostream>
class A
{
public:
virtual ~A() {}
};
class B : public A
{
public:
int x;
};
class C : public A
{
public:
int x;
int y;
};
int main()
{
A* aArray = new B[2];
(dynamic_cast<B&>(aArray[0])).x = 1; //segfault here
(dynamic_cast<B&>(aArray[1])).x = 2;
(dynamic_cast<C&>(aArray[0])).y = 3;
std::cout << (dynamic_cast<B&>(aArray[1])).x << std::endl;
return 0;
}
【问题讨论】:
-
Mine 在
(dynamic_cast<B&>(aArray[1])).x = 2;崩溃,这是有道理的,因为 &aArray1[1]=aArray+sizeof(A)... 但是 sizeof(A) -
不要使用多态数组!
-
不要使用多态类型的数组。指针运算会产生不正确的行为。
-
@jsantander:按照这个推理,您可以将其发布为答案。
标签: c++ rtti dynamic-cast