删除一个类的所有成员

2024-01-07

昨天我读了一位同事的一些代码,发现了这一点:

class a_class
{
public:
    a_class() {...}
    int some_method(int some_param) {...}

    int value_1;
    int value_2;
    float value_3;
    std::vector<some_other_class*> even_more_values;
    /* and so on */
 }

 a_class a_instances[10];

 void some_function()
 {
     do_stuff();
     do_more_stuff();

     memset(a_instances, 0, 10 * sizeof(a_class)); // <===== WTF?
 }

这合法吗(WTF 线,不是公共属性)?对我来说,味道实在是太难闻了…… 该代码在使用 VC8 编译时运行良好,但在使用 VC9 编译时调用时会抛出“意外异常”a_instances[0].event_more_values.push_back(whatever),但是当访问任何其他成员时。有什么见解吗?

编辑:更改了memsetmemset(&a_instances... to memset(a_instances...。感谢爱德华指出这一点。
EDIT2:删除了 ctor 的返回类型。谢谢。

结论:谢谢各位,你们证实了我的怀疑。


这是一种广泛接受的 C 结构体初始化方法。
在 C++ 中它当然不起作用,因为你不能假设任何关于vector的内部结构。将其清零很可能会使其处于非法状态,这就是程序崩溃的原因。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除一个类的所有成员 的相关文章

随机推荐