Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TThread: удалять ли указатель на объект потока? 
V
    Опции темы
Alca
Дата 17.3.2009, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

Ну почти, вам слово destructor перед TObject.Destroy ни о чем не говорит?

Говорит что это метод класса (в данном случае объекта TObject): smile 
а там тело пустое.
Код

destructor TObject.Destroy;
begin
//пусто
end;

Код

__fastcall TObject::~TObject() {
    //пусто
}


Добавлено @ 17:39
а не оператор (каким является delete). 
Вообще я в Делфях не очень то и спец.

Это сообщение отредактировал(а) Alca - 17.3.2009, 17:43


--------------------
PM WWW ICQ Skype Jabber   Вверх
xvr
Дата 17.3.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Alca @ 17.3.2009,  17:38)
Цитата

Ну почти, вам слово destructor перед TObject.Destroy ни о чем не говорит?

Говорит что это метод класса (в данном случае объекта TObject): smile 

Это не просто метод, а именно деструктор
Цитата

а там тело пустое.
Код

destructor TObject.Destroy;
begin
//пусто
end;

Код

__fastcall TObject::~TObject() {
    //пусто
}

Как видите, оно и в С++ пустое  smile Кроме пустого тела, там еще есть вся машинерия по удалению объекта - ее туда добавляет компилятор (для этого и пишется слово destructor)
Цитата

Добавлено @ 17:39
а не оператор (каким является delete). 
В C++ оператор delete вызывает деструктор объекта и освобождает занимаемую им память, в Delphi это делается явным вызовом метода-деструктора (ну нет там оператора delete). Результат одинаковый  smile 
PM MAIL   Вверх
Alca
Дата 17.3.2009, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Ну типа вкурил


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 18.3.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



При
Код

pT[i]->FreeOnTerminate = true;

TObject.Free  не нулит указатель, но мне надо чтоб он нулился автоматом при разрушении объекта. 
Как это сделать? Куда впихнуть:
Код

pT[i] = NULL;

Код

procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;


Это сообщение отредактировал(а) Alca - 18.3.2009, 13:29


--------------------
PM WWW ICQ Skype Jabber   Вверх
Anikmar
Дата 18.3.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Можно обернуть свои классом как-нибудь так:
Код

class MyClass: public Какой-токласс
{
  public: 
  MyClass **BackVar;
   MyClass(MyClass **pBackVar) {BackVar = pBackVar;};
  ~MyClass() {*pBackVar = NULL; };
};

// Создание объекта:
MyClass *pMyClass = new MyClass(&pMyClass);


Главное, чтобы ДЕСТРУКТОР базового класса был виртуальным, если хочется, чтобы работал изнутри при самоуничтожении.

Добавлено @ 13:59
В конструкторе забыл поставить вызов конструктора базового класса

Это сообщение отредактировал(а) Anikmar - 18.3.2009, 20:48
PM MAIL ICQ   Вверх
xvr
Дата 18.3.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Alca @ 18.3.2009,  13:26)
При
Код

pT[i]->FreeOnTerminate = true;

TObject.Free  не нулит указатель, но мне надо чтоб он нулился автоматом при разрушении объекта. 
Как это сделать? Куда впихнуть:
Код

pT[i] = NULL;


Свой деструктор или event OnTerminate. Только учти, что если где нибудь останутся забытые указатели на этот многострадальный объект (TThread) - их никто нулить не будет
PM MAIL   Вверх
Vyacheslav
Дата 18.3.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



Цитата(Anikmar @  18.3.2009,  13:58 Найти цитируемый пост)
Главное, чтобы конструктор базового класса был виртуальным, если хочется, чтобы работал изнутри при самоуничтожении.

Два балла за ответ.
Конструктор не может быть виртуальным.
Попав ко мне на техническое интервью  рисковали  получить отказ в замещении вакансии программиста С++. smile 
В С++ Builder конструторы классов, которые  являются производными от TObject, могут объявляться виртуальными, но это просто напоминание о том, что поведение конструкторов VCL классов в некторых случаях отличается от стандарта С++, в частности  при вызове виртуальных функций в теле конструктора. 



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Anikmar
Дата 18.3.2009, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата

Два балла за ответ.
Конструктор не может быть виртуальным.


Да ладно прикалываться - я же про деструкторы писал. Обычная очепятка.


PM MAIL ICQ   Вверх
Vyacheslav
Дата 18.3.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



 smile  


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1963 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.