我看到如下代码并且不喜欢它。特别是memset(static_cast(this),0,sizeof(BaseStruct)); 我需要重构的论据,并在这里找到一个:Why can it be dangerous to use this POD struct as a base class?
你看到更多问题吗? vtable有危险吗?
// abstract class
class BaseA {
public:
virtual void doSomethingA() = 0;
};
// no method, no virtual method, only simple data
typedef struct BaseStruct {
int x;
float y;
long z[10];
} BaseStruct;
class Subclass : public BaseA, public BaseStruct {
public:
virtual void doSomethingA() {}
virtual void doSomethingElse() {}
void resetBaseA() {
memset(static_cast<BaseStruct*>(this), 0, sizeof(BaseStruct));
}
};
答案 0 :(得分:0)
BaseStruct没有虚拟成员,所以你应该很好。 vtbl应该是BaseA。但是,如果可以明确重置每个成员,那就更好了。这是推荐的。