When declaring objects (not references or pointers), we can either directly declare an object with no explicit initializer or parenthesis, or explicitly provide initializer with parenthesis. Note that although the default constructor was defined and we may call general default functions without providing any arguments, we cannot initialize objects by such function call scheme. In other words, we may not provide a pair of parenthesis while no explicit initializer arguments.
Suppose class SomeClass has default constructor, then
SomeClass object1; // legal SomeClass object2(initializer); // legal SomeClass object3(); // illegal (compiler won't complain, // but it will consider object3 as a function)
When initialize object pointers using keyword new, there will be different behaviors for explicitly and implicitly defined default constructors.
For classes with explicitly defined default constructor, the following 2 schemes work exactly the same way.
SomeClass *pointer1 = new SomeClass; // call default constructor SomeClass *pointer2 = new SomeClass(); // call default constructor
However, for classes without explicitly defined default constructor, the 2 schemes differ in the initial value for object data members.
AnotherClass *pointer1 = new AnotherClass; // undefined data members AnotherClass *pointer2 = new AnotherClass(); // nullified data members
I wrote a sample code and tested with both g++ and MSVC, and I am attaching the output by MSVC in this post after the code.
Related Posts:
Array Declaration and Initialization
new and delete
No comments:
Post a Comment