通过指针调用联合数据成员的虚函数会导致分段错误

时间:2017-09-09 15:12:59

标签: c++ c++11

我有一个类的实例,我将其存储在一个联合中。当我通过指向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;
}

0 个答案:

没有答案