Форум по Delphi программированию



Вернуться   Форум по Delphi программированию > C/C++ > C/C++
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.03.2015, 09:55
Alik7107 Alik7107 вне форума
Прохожий
 
Регистрация: 29.01.2006
Сообщения: 5
Репутация: 10
По умолчанию Как узнать инициализирована переменная тип класса или нет?

Добрый день,

После Дельфи начинаю программировать на с++.
В Дельфи было очень удобно проверить создана ли переменная типа класса или нет, например:

Код:
TMyClass = class(...)
...
end;

var
  MyClass: TMyClass;
begin
  ...
  if MyClass = nil then
     MyClass = TMyClass.Create(nil);
MAD: Читаем правила про тег CODE.


Можно ли в С++ сделать такую же проверку?

Последний раз редактировалось M.A.D.M.A.N., 16.03.2015 в 17:47.
Ответить с цитированием
  #2  
Старый 16.03.2015, 20:58
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Почитай про умные указатели
Ответить с цитированием
  #3  
Старый 16.03.2015, 21:11
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Код:
TMyClass MyClass = NULL;
...
if (MyClass == NULL)
    MyClass = new TMyclass(NULL);
Только инициализировать надо все равно, хотя бы нулем. Это и делфи касается.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 16.03.2015, 21:55
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Если переменная глобальная, она уже обнулена.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 16.03.2015, 22:01
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
Если переменная глобальная, она уже обнулена.
Да. Но по примеру - может, этот код находится в функции.
А вообще - инициализация нулем все равно хорошая практика: хуже точно не станет, зато какой-нибудь левый компилятор точно не сгенерирует кривой код, запихнув переменную в секцию BSS (или как там называется uninitialized data в PE-шнике). Хотя это в большей степени к Си относится, конечно.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #6  
Старый 17.03.2015, 06:49
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,503
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Внутри функции инициализировать переменную nil`ом? Компилятор хинт выдаст, типа «значение присвоено, но нигде и никогда не используется».
[-]
А, это ж С++, всё понятно.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #7  
Старый 17.03.2015, 08:36
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

для глобальных переменных, а также для объектных public использование лишь в одном месте, либо просто объявление не вызывает диарею компилятора ибо они могут быть использованы другими модулями или наследниками.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #8  
Старый 17.03.2015, 16:27
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Ну как же нигде не используется?

Код:
TMyClass *MyClass = NULL;
...
if (MyClass == NULL)// <<==-----вот здесь !!!
    MyClass = new TMyclass(NULL);
Ответить с цитированием
Ответ



Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:03.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter   Ссылка на Telegram