我有一个类的实例,我将其存储在一个联合中。当我通过指向union成员的指针调用类的虚函数时,我得到了一个分段错误。我怀疑我的代码可能不起作用,但在这种情况下我应该注意哪些事情(例如标准的一部分或类似的东西)?我在C ++ 11模式下使用Clang ++ 3.9.0和GCC 7.2.0进行了测试。
#include <iostream>
struct test_class
{
virtual void virtual_do_stuff()
{
std::cerr << "Doing stuff (virtual)." << std::endl;
}
void non_virtual_do_stuff()
{
std::cerr << "Doing stuff (non-virtual)." << std::endl;
}
};
union un
{
int a; // Dummy.
test_class c;
~un() {}
un() {}
};
int main(int argc, char **argv)
{
un u;
test_class c;
test_class *cptr(&c);
cptr->virtual_do_stuff();
u.c = std::move(c);
u.c.virtual_do_stuff();
test_class *cptr2(&u.c);
cptr2->non_virtual_do_stuff();
cptr2->virtual_do_stuff(); // Causes the segmentation fault.
return 0;
}