Далее в моем коде, я проверяю для наблюдения проверки, если объект является пустым/пустым.
Существует ли способ установить объект в NULL?
Объект класса не может быть установлен в NULL; однако вы можете установить указатель (который содержит адрес в памяти объекта) в NULL.
Пример того, что вы не можете сделать, о чем вы спрашиваете:
Cat c;
c = NULL;//Compiling error
Пример того, что вы можете сделать:
Cat c;
//Set p to hold the memory address of the object c
Cat *p = &c;
//Set p to hold NULL
p = NULL;
Вы можете установить любой указатель на NULL
, хотя NULL
просто определяется как 0 в C ++:
myObject *foo = NULL;
Также обратите внимание, что NULL
определяется, если вы включаете стандартные заголовки, но не встроен в сам язык. Если NULL
не определено, вы можете использовать 0 вместо этого или включить это:
#ifndef NULL
#define NULL 0
#endif
В качестве отступления, если вы действительно хотите установить объект, а не указатель, на NULL
, вы можете прочитать о шаблоне пустого объекта .
Вы хотите проверить, является ли объект NULL / пустым. Быть NULL и пустым - это не одно и то же. Как уже упоминали Джастин и Брайан, в C ++ NULL - это присваивание, которое вы обычно связываете с указателями. Вы можете перегрузить operator = возможно, но хорошо подумайте, если вы действительно хотите это сделать. Пара других вещей:
bool IsEmpty ()
, который возвращает истину, если переменные объекта сброшены в какое-то состояние по умолчанию? Угадайте, что это могло бы обойти использование NULL. A * p = new A; ... p = NULL;
неверно (без удаления p), если вы не можете гарантировать, что ваш код будет собран сборщиком мусора. Во всяком случае, это привело бы к утечкам памяти, а при нескольких таких утечках высока вероятность того, что у вас будет медленный код. class Null {}; Null _NULL;
, а затем перегрузите operator = и operator! = Других классов в зависимости от вашей ситуации. Возможно, вам стоит опубликовать нам некоторые подробности о контексте, чтобы помочь вам лучше с вариантом 4.
Арпан