Перейти к содержанию
Fire Monkey от А до Я
  • 0

Почему при очистке элементов у TComboBox, не удаляются пользовательские объекты, прикрепленные к итемам?


PFC

Вопрос

Есть класс:

class TMyObjectInt : public TObject
{
private:
     int Value;
public:
     __fastcall TMyObjectInt (int _Value);
     __fastcall ~TMyObjectInt();
};

Есть ComboBox:

for (int i = 1; i <= 10; i++)
	cbxItems->Items->AddObject(IntToStr(i), new TMyObjectInt(i));

Почему при вызове ->Clear() не вызываются деструкторы для TObject'ов? Казалось бы базовый TObject замечательно для этого подходит, даже деструктор у него виртуальным объявлен.

Я могу написать свою функцию очистки, но это потенциально приводит к ошибкам, особенно если я отдаю указатель на ComboBox за пределы своей формы.

 

Кстати, так же ведут себя и многие другие контролы, да и в VCL было так же.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы
  1. Потому что лучше очищать пользовательские объекты, так как это потенциально снижает варианты использования списков. Так как в качестве такого объекта может выступать все что угодно. Начиная от простых объектов, как у вас, и заканчивая "тяжелыми" объектами коннектами, источниками данных и тд. В этом случае вам придется делать дубликаты ваших данных или использовать более умные варианты прокси объектов для доступа к единому источнику данных.
  2. Используемый для хранения итемов TStringList не подразумевает очистку хранимых в нем объектов. Для этого есть другой список TObjectList, но он не используется по причине первого пункта.
  3. Если вы хотите отследить момент удаления объекта, для исключения его из списка. Вы можете воспользоваться интерфейсом IFreeNotification
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...