0

I see code like below and don’t like it. Especially memset(static_cast(this), 0, sizeof(BaseStruct)); I need arguments for refactoring and found one here: Why can it be dangerous to use this POD struct as a base class?

Do you see more problems? Is vtable in danger?

// 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));
    }
};
Community
  • 1
  • 1
atretkow
  • 362
  • 2
  • 8

1 Answers1

0

BaseStruct has no virtual member, so you should be good. vtbl should be for BaseA. However, better would be if could reset each individual member explicitly. That's recommended.

Dr. Debasish Jana
  • 6,980
  • 4
  • 30
  • 69