Class A
{
};
What is the difference between A a , A* a and A* a = new A().
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
Creates an instance of an A that lives on the stack using the default constructor.
Is simply a uninitialized pointer to an A. It doesn’t actually point to an A object at this point, but could. An initialized pointer (in this case, set to NULL) would look like so:
The difference here is that a null pointer does not point to any object while an uninitialized pointer might point anywhere. Initializing your pointers is a good practice to get into lest you find yourself wondering why your program is blowing up or yielding incorrect results.
Similarly, you don’t want to attempt to dereference either a NULL pointer or an uninitialized pointer. But you can test the NULL pointer. Testing an uninitialized pointer yields undetermined and erroneous results. It may in fact be != 0 but certainly doesn’t point anywhere you intend it to point. Make sure you initialize your pointers before testing them and test them before you attempt to dereference them.
should be written as
and that creates a new A object that was allocated on the heap. The A object was created using the default constructor.
Where a default constructor is not explicitly written for a class, the compiler will implicitly create one though I don’t believe the standard does not specify the state of data members for the object implicitly instantiated. For a discussion about implicit default constructors, see Martin York’s response to this SO question.