Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Have two class as below:
struct MyBase
{
__int64 x;
__int64 y;
MyBase()
{
memset(this, 0, sizeof(MyBase));
}
};
struct MyDerived: public MyBase
{
int z;
MyDerived():MyBase(), z(0)
{}
};
Then create two objects as below, and then compare these two
objects with memcmp, do you think the c compare will be equal since the
constructor has initialized all the members of the objects to be 0?
MyDerived obj1;
MyDerived obj2;
if (memcmp(&obj1, &obj2, sizeof(MyDerived)) == 0)
{
cout << "equal" << endl;
}
The answer is no. Since due to data alignment, the size of
MyDerived is 24 bytes, although the constructor has initialized x, y and z to
0, there are still 4 bytes keeps uninitialized, so they may be equal or not.
Comments
- Anonymous
April 15, 2012
Interesting issue. Thanks for posting!