Дело в том, что срабатывает объявление constructor - это особая "процедура", которая строит для объектов особые таблицы VMT (Virtuel Method Table), таблицу динамических методов (процедур и функций объекта). Отсюда и название "построитель" Виртуальные методы вызываются в выполняемом файле (не в исходном тексте программы!) по адресу, который хранится в такой таблице. Если ее нет, то при вызове виртуального метода (без предшествующего вызова констрактора) идет обращениу к той области памяти, где она должна быть и где должен быть адрес процедуры, а там ... - в лучшем случае получите "Программа выполнила недопустимую операцию...". Хуже, если начнет что-то делать! Но что? Аналогично, закончив работу класса (объекта) нужно оную таблицу удалить. Делает это "особая" поцедура destructor. ОБЕ МОГУТ НИЧЕГО БОЛЬШЕ НЕ ДЕЛАТЬ! Срабатывает объявление constructor, destructor! Дополнительный код для обеспечения такой работы писать самому не надо. Функциональнось добавляем им для экономии, чтобы не писать других методов
Нет, конечно. Это в Delphi сложилась такая традиция. В Borland Pascal называли Init. В С++ констрактор называется именем класса (если его не создаешь сам, то такой создает компилятор), а дестрактор, кстати называется ~<имя класса>. Кстати, констракторов, как и дестракторов можешь заводить сколько хошь
Вряд ли... Выше по треду Init - статический метод (конструктор), а их можно вызывать не создавая экземпляры объекта. (Фактически - вызов конструктора от типа (TSomeClass.Init) - оно и есть). Другое дело, что в Object Pascal динамическими (в BP названиях) объектами, после такого вызова, созданный объект перейдёт в разряд утечек памяти...
Да, только надо указывать, какого класса Create GDBPASW.exe - работа с ним такая же, как с GDB - есть описание на сайте Что не понятно будет - пиши, ибо возможности его огромны. Я с ним познакомился при работе с GCC на С ДА!!! Работать с ним лучше из FAR'а. ИМХО
Иван Шихалев писал(а): А теперь попробовать что-нибудь с объектом "c" сделать - не метод класса.
Что именно сделать-то надо, что значит сделать не метод класса? Объект не создан - значит, что не выделена память под поля объекта, нет записей в VMT и Self содержит мусор (а может и nil - не проверял). На работоспособность статических методов это не влияет.