Re: Are members of a c++ class initialized to 0 by the default constructor
?
* Skybuck Flying, on 21.06.2011 16:12:
My question is basically:
Are members of a c++ class initialized to 0 by the default constructor ?
Nope.
Unless you define one that does that.
But for a Plain Old Data type (which does not have a user-defined constructor)
you can ask for zero-initialization where you create an object, like
p = new T(); // The parenthesis asks for value-initialization,
// which for a Plain Old Data type is zeroing.
For example:
class TSomeClass
{
private:
int mField1;
int mField2;
protected:
public:
TSomeClass();
~TSomeClass();
};
// constructor
TSomeClass::TSomeClass()
{
}
This constructor does not zero-initialize the members.
But you could ask for it, like
TsomeClass::TSomeClass()
: mField1()
, mField2()
{}
// destructor
TSomeClass::~TSomeClass()
{
}
Usage example:
class TSomeOtherClass
{
private:
TSomeClass mSomeClass();
public:
// default constructor here etc.
}
int main()
{
TSomeClass vSomeClass();
Note that this is a function declaration, not a variable declaration.
TSomeClass *vSomeClassArray;
vSomeClassArray = new TSomeClass[100];
return 0;
}
So will all class objects members be initialized to zero ?
Not guaranteed with your code, no. But the compiler may emit code to do it anyway.
I think you could ask for it like
vSomeClassArray = new TSomeClass[100]();
but I'm not sure of the exact syntax here. Nor about whether it is supported by
Microsoft's compiler.
[snip]
The thing you need to keep clear in your mind is that for POD type, there is not
really any constructor. Then the initialization performed depends on the
instantiation expression. T versus T().
Cheers & hth.,
- Alf
--
blog at <url: http://alfps.wordpress.com>