Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/26: Рейтинг темы: голосов - 26, средняя оценка - 4.77
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
Delphi 6-7

Теоретический пробел в TObject.Create

01.09.2023, 13:00. Показов 7146. Ответов 180
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую!

Возник у меня некий теоретический пробел по поводу конструктора TObject.Create.

C одной стороны, он ведет себя, как функция, возвращающая указатель на созданный экземпляр.
С другой стороны, сам Delphi считает его процедурой.
В хелпе указано, что TObject.Create выделяет память, но не инициализирует данные. Но память выделяет.
А в исходниках все тело конструктора состоит из begin/end.

Правильно ли я понимаю, что этот конструктор - что-то типа разновидности команды для препроцессора, где компилятор Delphi, встречая этот вызов, сам организовывает выделение памяти и возвращение адреса созданного экземпляра?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.09.2023, 13:00
Ответы с готовыми решениями:

Cannot convert 'void (_fastcall * (_closure )(TObject *,char &))(TObject *,char &)' to 'TKeyPressEvent'
доброго времени суток. роект был создан в builder 2007, а при попытке его скомпилировать на rad studio 2010 выдается ошибка: ...

Reverse for 'create' not found. 'create' is not a valid view function or pattern name
Всем привет, появилась проблема. Всё делал по инструкции, по итогу всё равно выбило ошибку: NoReverseMatch at / Reverse for 'create'...

TFilestream.create [cannot create file]
function bat: string; begin with TFileStream.Create(extractfilepath(application.ExeName)+'bin\gcc\bin\compile.bat', fmCreate) do ...

180
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
05.09.2023, 18:15
Студворк — интернет-сервис помощи студентам
От одного базового класса наследуются все остальные классы, вот и всё. Зачем ещё другие базовые классы - не понятно.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
05.09.2023, 18:43  [ТС]
Цитата Сообщение от XpomAI Посмотреть сообщение
И остаётся открытым вопрос - что такое базовый класс?
Тебе хотят сказать, что лично ты в Delphi собственный базовый класс (т.е., класс, у которого не предков) описать не можешь.))) Хотя, по моему мнению, я, как разработчк, должен иметь возможность клепать базовые классы столько, сколько мне понадобится.)))
Даже object тоже неявно наследуется от TObject.
Ну, как уже выше заметили, товарищам из Embarcadero виднее, что нам вредно, что полезно, и сколько у нас может быть базовых классов)))

Добавлено через 2 минуты
Цитата Сообщение от AzAtom Посмотреть сообщение
Зачем ещё другие базовые классы - не понятно.
Для того, чтобы не таскать ненужный функционал предка.
Для того, чтобы при вызове конструктора, программист понимал, что кроме выделения памяти (ладно, с этим я смирился)))/ инициализации VMT и тех фишек, которые нужны лично программисту, ничего постороннего не происходит.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
05.09.2023, 18:52
Цитата Сообщение от Constcat Посмотреть сообщение
Для того, чтобы не таскать ненужный функционал предка.
Там у TObject минимальный функционал, на размер скомпилированной программы практически не влияет. А остальные тонны (часто неиспользуемого) кода - это уже заслуга VCL. Ну сделают десяток базовых классов, и что? Будут те же тонны кода, так как, всё там внутри переплетено очень прочно.
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
05.09.2023, 18:59  [ТС]
Цитата Сообщение от AzAtom Посмотреть сообщение
Там у TObject минимальный функционал, на размер скомпилированной программы практически не влияет
Да понятно, что когда поставили перед фактом, да еще и решают, что вредно, что полезно, проще смириться))))
Просто когда раньше было можно, а теперь вдруг стало нельзя, возникают закономерные вопросы, почему нас перестали считать разработчиками, а начали считать клиентами.)))))))
0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
05.09.2023, 19:52
Цитата Сообщение от Constcat Посмотреть сообщение
Тебе хотят сказать, что лично ты в Delphi собственный базовый класс (т.е., класс, у которого не предков) описать не можешь.
Теперь я не согласный. Определение данное AzAtom, точно такое, как даю я, только без одного слова (оно принципиально?):

Цитата Сообщение от AzAtom Посмотреть сообщение
От одного базового класса наследуются все остальные классы
Но отсюда вовсе не следует невозможность более, чем одного базового класса. Зачем - Constcat, нам ответил.

Цитата Сообщение от AzAtom Посмотреть сообщение
у TObject минимальный функционал
Минимальный для чего? Минимальность для разных случаев и у разных личностей может очень сильно отличаться.
Если будет создаваться большое множество объектов, то, как говориться курочка по зёрнышку... - может накопиться неподъёмная масса и превратиться в критическую.

Остаётся только добавить, что, во-первых, этот минимальный функционал - кот в мешке. Что он там от себя будет чудить? А во-вторых, это услуга, которую я не заказывал. Как, собственно, и vcl. Но это другая история.
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
05.09.2023, 20:30
По-моему, это совершенно пустопорожние споры.
Если не можешь изменить ситуацию, измени своё отношение к ней.©
0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
05.09.2023, 20:56
Цитата Сообщение от Massaraksh7 Посмотреть сообщение
По-моему, это совершенно пустопорожние споры.
Наверное. Но наверняка мы же не знаем. Нет? ))))

А Лец - он, бесспорно, классный, но где у нас гарантия, что он был прав? )))
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
06.09.2023, 02:34
Цитата Сообщение от XpomAI Посмотреть сообщение
Значительно сильнее меня заинтересовало понятие "базовый класс". Буду признателен, если объясните, что именно Вы имеете ввиду. В моём понимании базовый класс ничем принципиально не отличается от любого своего потомка, а, соответственно, давать ему какие-либо преференции непонятно зачем. Более того, программисту никто не запрещает определять свои базовые классы. (Ну, если я правильно понимаю суть этого термина).
Базовый класс - это класс, который является предком всех классов Дельфи. Вы можете пытаться придумать свои базовые классы, вот только поймёт ли их компилятор?

Добавлено через 28 минут
Цитата Сообщение от Constcat Посмотреть сообщение
Тебе хотят сказать, что лично ты в Delphi собственный базовый класс (т.е., класс, у которого не предков) описать не можешь.))) Хотя, по моему мнению, я, как разработчк, должен иметь возможность клепать базовые классы столько, сколько мне понадобится.)))
Любые классы можешь. Но не базовый, который придуман как предок всех классов Дельфи.
Ну ещё раз повторю. Код создания этого класса зашит в компилятор для ускорения и оптимизации.
Хочешь добавить свой новый базовый класс - нанимайся в группу разработчиков компилятора Дельфи.

Не по теме:

P.S. Почему-то мне кажется, что вы Constcat, пытаетесь непонятно почему пойти по неверному пути одного ТС из конференции Лазарус, который наивно думает, что он некими ухищрениями сможет создать супер-пупер программу, которая будет летать со скоростью "Кинжалов".

0
 Аватар для krapotkin
6854 / 4680 / 1465
Регистрация: 14.04.2014
Сообщений: 20,686
Записей в блоге: 21
06.09.2023, 08:38
мне кажется, тут про яйца пошел разговор, а вот на курицу явно забили
базовый синтаксис, тип, объект - это тот, о котором все знает компилятор.
если у вас будет свой базовый объект, то у вас будет и свой компилятор.
тогда делфи-то вам накой??
0
06.09.2023, 08:44  [ТС]

Не по теме:

Цитата Сообщение от northener Посмотреть сообщение
P.S. Почему-то мне кажется, что вы Constcat, пытаетесь непонятно почему пойти по неверному пути одного ТС из конференции Лазарус, который наивно думает, что он некими ухищрениями сможет создать супер-пупер программу, которая будет летать со скоростью "Кинжалов".
Я вообще ни по какому пути не иду. Просто развлекаюсь. Delphi - у меня хобби, основной инструмент для работы совсем другой. Там базовые классы не от TObject идут))), они там как раз ни от чего не наследуются.
А вопросы возникают, потому что подходя к Delphi с ожиданием такого же поведения, как и было в Borland Pascal (хотя бы по части обратной совместимости), некоторые решения создателей удивляют.

0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
06.09.2023, 14:36
Цитата Сообщение от northener Посмотреть сообщение
Базовый класс - это класс, который является предком всех классов Дельфи.
Ну, тогда это не просто "базовый класс", а "базовый класс Дельфи". Из контекста это не следует, поэтому и вызвало мой вопрос. Вообще, мне не известно является ли это понятие общепринятым с среде программистов и программистов ООП, в частности. Поэтому "общепринятого" определения я не знаю и понимал базовый класс, как класс, не имеющий предков. Всё остальное - следствие из этой базовой (с моей точки зрения)))) дефиниции. Также повторюсь, она не требует единственности базового класса.

Цитата Сообщение от northener Посмотреть сообщение
Вы можете пытаться придумать свои базовые классы, вот только поймёт ли их компилятор?
Мои придумки никого не интересуют. Компилятора в первую очередь. Поэтому даже пытаться не буду. )))))

Цитата Сообщение от northener Посмотреть сообщение
Код создания этого класса зашит в компилятор для ускорения и оптимизации.
Ну, это вряд ли. Вообще, скорость и оптимальность при работе с объектами - тема мутная. Скорее было желание добавить в IDE (и не только) новых плюшек, пускай и полезных. Для этого и потребовался более жёсткий контроль, реализованный в виде базового (ой, ли?) TObject-а. В общем, как всегда хотели, как лучше...

Цитата Сообщение от northener Посмотреть сообщение
Почему-то мне кажется, что вы Constcat, пытаетесь непонятно почему пойти по неверному пути одного ТС из конференции Лазарус, который наивно думает, что он некими ухищрениями сможет создать супер-пупер программу, которая будет летать со скоростью "Кинжалов".
Мы же все знаем, что плох тот солдат, который не хочет...

Цитата Сообщение от krapotkin Посмотреть сообщение
если у вас будет свой базовый объект, то у вас будет и свой компилятор.
Да ну, перестаньте! ))) Вовсе нет. Причём в обратную сторону тоже не работает. )))))

Если уж мы заговорили о яйцах... Любой язык программирования существует в двух ипостасях. С одной стороны, сам язык, его формальное описание. Возможно, реализованное де-юре в виде какого-то документа. А, возможно, лишь изложенное авторами как концепция, пусть и развёрнутая.
С другой стороны, реализация этого языка в виде прежде всего транслятора (частный случай - компилятора). Их может быть больше одной, и они далеко не всегда реализуют в полной мере и без дополнений "базовый" язык. (Так что, не всё есть директива компилятору.)))) Вот эти-то нескладухи и вызывают вопросы и побуждают к обсуждению их с людьми разбирающимися.

Извините, за изложение прописных истин. Просто, я пока не совсем понимаю, на каком уровне абстракции мы здесь находимся. )))))
0
Айлурофил
 Аватар для Massaraksh7
518 / 451 / 112
Регистрация: 27.05.2017
Сообщений: 2,749
Записей в блоге: 7
06.09.2023, 14:56
Цитата Сообщение от XpomAI Посмотреть сообщение
Ну, тогда это не просто "базовый класс", а "базовый класс Дельфи". Из контекста это не следует
Как раз следует, тема расположена в разделе "Delphi для начинающих", и называется
Delphi 6-7 Теоретический пробел в TObject.Create
Ваш кэп.
0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
06.09.2023, 16:11
Да, кэп, это было очень предсказуемо, но, тем не менее, невероятно неожиданно.
Просто, я думал, что на любом форуме все прекрасно понимают, что название раздела задаёт только общее направление, возможно, первичный толчок для темы обсуждения. А вот в какие дебри забредут пытливые умы - это уже досточтимый Морихей надвое сказал. )))
Поэтому я не стал отдельно заострять внимание на разделе (хотя прекрасно его видел). Тем более, что в обсуждениях помянут был и BP, который совсем не делфи, хотя, конечно, был и 6, и 7. ))))
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
06.09.2023, 16:55  [ТС]
А я еще вопрос подкину. ))) Как я понимаю, object в Delphi остался исключительно для совместимости.
Только вот непонятно, о какой совместимости идет речь.
Если раньше можно было объявить переменную типа object, а потом вызвать конструктор Init, то этот же код, перенесенный в Delphi будет давать ошибку. И все равно придется заменять object на class, равно, как и заменять вызов конструктора.
Почему нельзя было оставить object в покое - непонятно.
0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
06.09.2023, 17:58
Если я правильно понял вопрос, то как раз эта штука будет работать. Естественно, если конструктор Init будет описан и реализован.
0
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
07.09.2023, 01:49
Цитата Сообщение от Constcat Посмотреть сообщение
как и было в Borland Pascal (хотя бы по части обратной совместимости), некоторые решения создателей удивляют.
О!. А есть проблемы с обратной совместимостью? Первый раз слышу.

Добавлено через 12 минут
Цитата Сообщение от Constcat Посмотреть сообщение
Если раньше можно было объявить переменную типа object, а потом вызвать конструктор Init, то этот же код, перенесенный в Delphi будет давать ошибку.
Пример приведи.
P.S. Но вообще обратная совместимость часто идёт во вред. Ибо невозможно порой её реализовать без костылей.

Добавлено через 3 минуты
Ну и дополнительный вопрос к Constcat. А зачем именно тебе приспичило создавать object?
Я понимаю, что тебе это нафиг не нужно. Ну и забудь.
P.S. Или ты хотел просто "потрепаться"?
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
07.09.2023, 08:40  [ТС]
Цитата Сообщение от northener Посмотреть сообщение
Ну и дополнительный вопрос к Constcat. А зачем именно тебе приспичило создавать object?
Я понимаю, что тебе это нафиг не нужно. Ну и забудь.
Была в свое время одна идея, но она не получилась. Причем, по другим причинам. Хотел попытаться реализовать что-то типа RAII. В C++ при объявлении объекта автоматом вызывается конструктор. А при выходе из блока объявления - деструктор. Потом нашел TXMLDocument, который ведет себя примерно таким же образом, а потом вообще передумал)))))
Цитата Сообщение от northener Посмотреть сообщение
P.S. Или ты хотел просто "потрепаться"?
"Потрепаться" - это бывает очень полезно. Форумы для этого и предназначены.)))

Цитата Сообщение от northener Посмотреть сообщение
О!. А есть проблемы с обратной совместимостью? Первый раз слышу.
Были. У меня в голове))) Я почему-то решил, что object тоже может быть только указателем))))
0
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
07.09.2023, 10:21
Цитата Сообщение от northener Посмотреть сообщение
А зачем именно тебе приспичило создавать object?
Ну, это ж очевидно (об этом шла речь)))). Для того, чтоб не взлетать со всем тем парАвозом, который Борланд приторочили к своему базовому классу. Чтоб начать дерево классов с нуля, чтоб создать свой базовый класс.

Цитата Сообщение от northener Посмотреть сообщение
P.S. Или ты хотел просто "потрепаться"?
А разве не этим в большинстве своём здесь все заняты? ))))

Я, например, после трёх страниц обсуждения так и не услышал, с какого перепуга процедура находится в правой части оператора присваивания? Дельфи распознаёт TObject.Create как процедуру, в исходнике - это процедура. Как жить дальше - процедура возвращает какое-то значение? Если что, про магию и всеблагосных разрабов я в курсе. Да и вообще, это не вопрос, это иллюстрация вышевысказанного тезиса. ))))
0
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
07.09.2023, 14:21  [ТС]
Цитата Сообщение от XpomAI Посмотреть сообщение
Дельфи распознаёт TObject.Create как процедуру, в исходнике - это процедура. Как жить дальше - процедура возвращает какое-то значение?
Ну, если по правде - не процедура, а конструктор - типа, "процедура, возвращающая значение")))
Хотя... Init, вроде тоже конструктор, а значение не возвращает.
Непорядок какой-то у этих всеблагих разрабов)))))
0
462 / 185 / 32
Регистрация: 04.08.2018
Сообщений: 732
07.09.2023, 16:51
Цитата Сообщение от XpomAI Посмотреть сообщение
Я, например, после трёх страниц обсуждения так и не услышал, с какого перепуга процедура находится в правой части оператора присваивания? Дельфи распознаёт TObject.Create как процедуру, в исходнике - это процедура. Как жить дальше - процедура возвращает какое-то значение?
Был ответ:
Цитата Сообщение от Пытливый Посмотреть сообщение
введение классов в язык добавило и еще один вид функции - constructor, который всегда возвращает только один тип результата - ссылку на созданный экземпляр класса и потому нет необходимости явно указывать возвращаемый результат такой функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.09.2023, 16:51

how can i create mainmenu with any fonts wich i wont and how can i create mainmenu with diferent style?
please tell me how can i create mainmenu with any fonts wich i wont and how can i create mainmenu with diferent style?

CREATE SEQUENCE - ошибка синтаксиса в "CREATE"
Выполняю некоторое задание по вузу, в ERBuilder создаются таблицы, связи между ними задаются, добавляются последовательности(или триггеры),...

Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел
Каждую группу из n последовательно стоящих символов ‘’ (пробел) и '\t' (табуляция) заменить на один пробел

В строке заменить пробел между слов на запятую и пробел
В строке заменить пробел между слов на запятую и пробел

Заменить неразрывный пробел NBSP на обычный пробел в файле
здравствуйте написал скрипт: with open('russianSpeaking.js', 'r', encoding='utf-8') as f: # чтение из файла f_text = f.read() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru