Действительно ли возможно установить объект в NULL?

Далее в моем коде, я проверяю для наблюдения проверки, если объект является пустым/пустым.

Существует ли способ установить объект в NULL?

36
задан Deduplicator 30 September 2018 в 20:05
поделиться

3 ответа

Объект класса не может быть установлен в 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;
45
ответ дан 27 November 2019 в 05:55
поделиться

Вы можете установить любой указатель на NULL , хотя NULL просто определяется как 0 в C ++:

myObject *foo = NULL;

Также обратите внимание, что NULL определяется, если вы включаете стандартные заголовки, но не встроен в сам язык. Если NULL не определено, вы можете использовать 0 вместо этого или включить это:

#ifndef NULL
#define NULL 0
#endif

В качестве отступления, если вы действительно хотите установить объект, а не указатель, на NULL , вы можете прочитать о шаблоне пустого объекта .

3
ответ дан 27 November 2019 в 05:55
поделиться

Вы хотите проверить, является ли объект NULL / пустым. Быть NULL и пустым - это не одно и то же. Как уже упоминали Джастин и Брайан, в C ++ NULL - это присваивание, которое вы обычно связываете с указателями. Вы можете перегрузить operator = возможно, но хорошо подумайте, если вы действительно хотите это сделать. Пара других вещей:

  1. В C ++ NULL-указатель сильно отличается от указателя, указывающего на «пустой» объект.
  2. Почему бы не использовать метод bool IsEmpty () , который возвращает истину, если переменные объекта сброшены в какое-то состояние по умолчанию? Угадайте, что это могло бы обойти использование NULL.
  3. Имеется что-то вроде A * p = new A; ... p = NULL; неверно (без удаления p), если вы не можете гарантировать, что ваш код будет собран сборщиком мусора. Во всяком случае, это привело бы к утечкам памяти, а при нескольких таких утечках высока вероятность того, что у вас будет медленный код.
  4. Вы можете сделать это class Null {}; Null _NULL; , а затем перегрузите operator = и operator! = Других классов в зависимости от вашей ситуации.

Возможно, вам стоит опубликовать нам некоторые подробности о контексте, чтобы помочь вам лучше с вариантом 4.

Арпан

4
ответ дан 27 November 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: