2012-04-14 2 views

ответ

5

Ключевое слово newreturns a pointer. Он должен быть назначен указателю на объект.

Это также будет работать:

MyObject o = MyObject(); 

EDIT:

Как отметил Сет, выше эквивалентно:

MyObject o; 

по умолчанию конструктора (т.е. без параметров) вызывается, если конструктор не задан.

+5

Или 'MyObject o;' –

+0

Я вижу! Я изучаю C++ после изучения Java, поэтому у меня создалось впечатление, что для создания экземпляра объекта требуется «новое». – Peter

+5

Цитата Йода: «Вы должны отучить то, что узнали». ;) –

3

Потому что они не эквивалентны. Попробуйте:

MyObject* o = new MyObject(); 
4

new MyObject() возвращает указатель на объект типа MyObject. Так что действительно вы пытаетесь назначить объект MyObject* (да, указатель также может считаться объектом). Таким образом, вы должны объявить переменную MyObject* или что-то совместимое как std::shared_ptr<MyObject>.

Правильная инициализация

// in C++03 
MyObject* o(new MyObject()); 

// in C++11 
MyObject* o {new MyObject()}; 

Хотя назначение

MyObject* o = new MyObject(); 

действует так же.

Смежные вопросы