memset for initialization in C++

Don’t use memset. It’s a holdover from C and won’t work on non-PODs. Specifically, using it on a derived class that contains any virtual functions — or any class containing a non-builtin — will result in disaster.

C++ provides a specific syntax for initialization:

class A {
public:
   A();
private:
   int a;
   float f;
   char str[35];
   long *lp;
};

A::A()
    : a(0), f(0), str(), lp(NULL)
{
}

To be honest, I’m not sure, but memset might also be a bad idea on floating-points since their format is unspecified.

Leave a Comment