Reputation: 4161
This works:
MyObject *o;
o = new MyObject();
And this does not:
MyObject o = new MyObject();
Why?
Upvotes: 5
Views: 10876
Reputation: 16709
The keyword new
returns a pointer. It must be assigned to a pointer of an object.
This would also work:
MyObject o = MyObject();
EDIT:
As Seth commented, the above is equivalent to:
MyObject o;
The default constructor (i.e. without parameters) is called if no constructor is given.
Upvotes: 11
Reputation: 34664
new MyObject()
returns a pointer to an object of type MyObject
. So really you are trying to assign an object MyObject*
(yes, a pointer can be considered an object, too). Thus, you have to declare a variable of MyObject*
or something compatible like std::shared_ptr<MyObject>
.
The proper initialisation is
// in C++03
MyObject* o(new MyObject());
// in C++11
MyObject* o {new MyObject()};
While the assignment
MyObject* o = new MyObject();
is valid as well.
Upvotes: 4
Reputation: 52549
Because they're not equivalent. Try:
MyObject* o = new MyObject();
Upvotes: 5