Что не так с ключевым словом "new" в C ++? - PullRequest
5 голосов
/ 17 января 2011

Я знаю, что это может звучать как глупый вопрос, но почему я получаю ошибку, которая говорит что-то вроде "

не может преобразовать объект * в объект

«когда я пытаюсь создать новый объект с помощью оператора«

Object obj = new Object();

»?

Должен ли я понять, что ключевое слово« new »зарезервировано дляуказатели?Или это что-то еще?

Ответы [ 6 ]

38 голосов
/ 17 января 2011
Object* obj = new Object();

new всегда возвращает указатель на объект.

, если вы пишете просто Object obj, это означает, что obj будет содержать сам объект.Если это объявлено таким образом внутри функции, то память будет распределена по стеку и будет стерта после выхода из этой функции.new выделяет память в куче, поэтому указатель может быть возвращен из функции.Обратите внимание, что указатель также может указывать на локальную (стековую) переменную.

8 голосов
/ 17 января 2011

Так как new возвращает указатель, вы должны использовать

Object *obj = new Object();
6 голосов
/ 17 января 2011

Объект obj;

- это все, что вам нужно.Создает объект obj.

6 голосов
/ 17 января 2011

новый оператор делает указатель на объект

там для Object *obj = new Object() должно работать.

но только Object obj () создает объект просто, но в пространстве стека

6 голосов
/ 17 января 2011

Точно.New создает объект в куче, а возвращает указатель на него .

1 голос
/ 24 января 2011

Я бы просто оставил комментарий, но, видимо, для этого мне нужен определенный представитель.

В Java переменные, используемые для хранения объектов, неявно являются указателями на объект.Так что new работает в C ++ так же, как и в Java, но вы не узнали об этом в Java.Я догадываюсь, что это причина вашего замешательства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...