Похоже, вам может понадобиться учебник по концепции «переменной» в C ++.
В C ++ время жизни каждой переменной привязано к ее охватывающей области видимости. Самый простой пример - локальные переменные функции:
void foo() // foo scope begins
{
UnloadingShip anUnloadingShip; // constructed with default constructor
// do stuff without fear!
anUnloadingShip.Unload();
} // // foo scope ends, anything associated with it guaranteed to go away
В приведенном выше коде "anUnloadingShip" по умолчанию создается, когда вводится функция foo (т.е. вводится ее область действия). Никакого "нового" не требуется. Когда охватывающая область видимости уходит (в данном случае, когда завершается foo), ваш определяемый пользователем деструктор автоматически вызывается для очистки UnloadingShip. Связанная память автоматически очищается.
Когда охватывающей областью является класс C ++ (то есть переменная-член):
class UnloadingBay
{
int foo;
UnloadingShip unloadingShip;
};
время жизни привязано к экземплярам класса, поэтому, когда наша функция создает «UnloadingBay»
void bar2()
{
UnloadingBay aBay; /*no new required, default constructor called,
which calls UnloadingShip's constructor for
it's member unloadingShip*/
// do stuff!
} /*destructor fires, which in turn trigger's member's destructors*/
члены aBay созданы и живут, пока живет aBay.
Все это выясняется во время компиляции. Нет подсчета ссылок во время выполнения, предотвращающего разрушение. Никаких других соображений не делается для чего-либо еще, что могло бы относиться к или укажите эту переменную. Компилятор анализирует написанные нами функции, чтобы определить область действия и, следовательно, время жизни переменных. Компилятор видит, где заканчивается область видимости переменной, и все, что необходимо для очистки этой переменной, будет вставлено во время компиляции.
«new», «NULL» (не забудьте «удалить») в C ++ вступают в игру с указателями. Указатели - это тип переменной, которая содержит адрес в памяти некоторого объекта. Программисты используют значение «NULL», чтобы указать, что указатель не содержит адреса (т. Е. Ни на что не указывает). Если вы не используете указатели, вам не нужно думать о NULL.
Пока вы не освоите, как переменные в C ++ входят в область видимости и выходят за нее, избегайте указателей. Это совсем другая тема.
Удачи!
person
Doug T.
schedule
04.09.2010
isEmpty
примерно на четыре строки длиннее, чем должна быть, то естьreturn this->unloadingShip == NULL;
. - person Ed S.   schedule 30.01.2012