Доступ к членам объекта, который не был инициализирован? - PullRequest
2 голосов
/ 03 октября 2009

Я не очень знаком с программированием на C ++. Я знаю основы программирования в нем (синтаксис, указатели и т. Д.), И я создал несколько базовых программ и выполнил некоторые базовые отладки на работе. Я озадачен этой строкой кода из Box2D, в частности, проекта Box2dTest из Cocos2D:

// Define the ground body.
b2BodyDef groundBodyDef;
groundBodyDef.position.Set(0, 0); // bottom-left corner

Как получается, что можно сделать это без инициализации groundBodyDef? Я знаю, что это не Objective-C, потому что примеры C ++ для самого Box2D такие же.

Ответы [ 4 ]

7 голосов
/ 03 октября 2009

groundBodyDef фактически инициализировано!

Я думаю, вы ожидали что-то вроде:

b2BodyDef *groundBodyDef = new b2BodyDef();

, который на самом деле все еще действует, но он инициализируется в куче. В вашей версии groundBodyDef инициализируется в стеке, как если бы вы инициализировали int в стеке.

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

2 голосов
/ 03 октября 2009

Если b2BodyDef имеет достойный конструктор по умолчанию, то часть о "без инициализации" просто не применяется - ctor по умолчанию инициализирован groundBodyDef!

2 голосов
/ 03 октября 2009

Объект был инициализирован его конструктором в первой строке.

Я бы порекомендовал следующую ссылку, которая является очень хорошим текстом на C ++: Аннотации на C ++ .

1 голос
/ 03 октября 2009

Если вы сделаете classname variable;, то variable будет инициализирован вызовом конструктора по умолчанию classname, что означает, что в вашем коде нет унифицированной переменной.

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