Это работает:C++ Указатели и Инстанцирование Объект
MyObject *o;
o = new MyObject();
И это не:
MyObject o = new MyObject();
Почему?
Это работает:C++ Указатели и Инстанцирование Объект
MyObject *o;
o = new MyObject();
И это не:
MyObject o = new MyObject();
Почему?
Ключевое слово new
returns a pointer. Он должен быть назначен указателю на объект.
Это также будет работать:
MyObject o = MyObject();
EDIT:
Как отметил Сет, выше эквивалентно:
MyObject o;
по умолчанию конструктора (т.е. без параметров) вызывается, если конструктор не задан.
Или 'MyObject o;' –
Я вижу! Я изучаю C++ после изучения Java, поэтому у меня создалось впечатление, что для создания экземпляра объекта требуется «новое». – Peter
Цитата Йода: «Вы должны отучить то, что узнали». ;) –
Потому что они не эквивалентны. Попробуйте:
MyObject* o = new MyObject();
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();
действует так же.
Зачем вам нужен указатель? – ipc
Вот что я пытаюсь понять. @MPelletier, кажется, объяснил это мне. – Peter