|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
Delphi 6-7 Теоретический пробел в TObject.Create01.09.2023, 13:00. Показов 7403. Ответов 180
Метки нет (Все метки)
Приветствую!
Возник у меня некий теоретический пробел по поводу конструктора TObject.Create. C одной стороны, он ведет себя, как функция, возвращающая указатель на созданный экземпляр. С другой стороны, сам Delphi считает его процедурой. В хелпе указано, что TObject.Create выделяет память, но не инициализирует данные. Но память выделяет. А в исходниках все тело конструктора состоит из begin/end. Правильно ли я понимаю, что этот конструктор - что-то типа разновидности команды для препроцессора, где компилятор Delphi, встречая этот вызов, сам организовывает выделение памяти и возвращение адреса созданного экземпляра?
0
|
|
| 01.09.2023, 13:00 | |
|
Ответы с готовыми решениями:
180
Cannot convert 'void (_fastcall * (_closure )(TObject *,char &))(TObject *,char &)' to 'TKeyPressEvent'
TFilestream.create [cannot create file] |
|
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,496
|
|
| 09.09.2023, 23:05 | |
|
Так, софистика или эвфемизм?
Ладно, считайте, как хотите. Запрещено, так запрещено.Только не понятно, чем так куча не угодила, и чем стек лучше? Только тем, что память выделяется чуть быстрее?
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|||
| 09.09.2023, 23:47 [ТС] | |||
|
Не по теме:
2. int a; int &b = a; = var a: Integer; var b: Integer absolute a; 3. int *a; int b; a = &b; = var a: ^Integer; var b: Integer; a:=@b; Примерно так. Добавлено через 7 минут Если объект создан на стеке, то память для него выделена уже заранее, геморроя меньше. Я помню, что мы тут про Delphi, но все-таки смещусь в сторону связки c++/Python, когда переменные окружения приходилось передавать из c++ в Python в виде килобайтного буфера, созданного на стеке, т.к, с динамикой были большие проблемы. Я к тому, что ситуации разные бывают, и запрещать разработчику какие-то вещи, которые для других типов данных вполне допустимы, более, чем странно.
0
|
|||
|
0 / 0 / 0
Регистрация: 02.09.2023
Сообщений: 27
|
||
| 10.09.2023, 00:54 | ||
|
Добавлено через 6 минут "Может", - что я говорю! NewInstance - виртуальный метод, автоматом вызывается в конструкторе. Сам же говорил. ))) Пора спать!
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 10.09.2023, 01:06 [ТС] | ||
|
Точно так же, как выделяется память в динамике, так же память и выделится в дате (специально для тебя пишу))) на этапе компиляции. В чем понт?
0
|
||
|
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
|
|
| 10.09.2023, 01:54 | |
|
0
|
|
|
462 / 185 / 32
Регистрация: 04.08.2018
Сообщений: 732
|
||||
| 15.09.2023, 19:35 | ||||
0
|
||||
|
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
|
|
| 16.09.2023, 01:51 | |
|
Rayvenor, я бы предложил ещё такое определение функций и процедур. Имхо оно более правильное в каком-то смысле. А именно в смысле использования в коде.
Функция может присутствовать в "правой части выражения". Процедура не может.
1
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 16.09.2023, 02:09 [ТС] | ||
|
Или того же присвоения для другой переменной процедурного типа. Формально говоря, процедура в данном случае ведет себя, как функция, возвращая некий результат.
0
|
||
|
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
|
||
| 16.09.2023, 02:30 | ||
|
2
|
||
|
|
|
| 16.09.2023, 11:22 | |
|
странно говорить, что процедура чего-то там возвращает
давайте обобщим, она может воспользоваться любым указателем на любой объект или любой глобальной переменной и поменять ее это же не считается возвратом? а если нам ссылку на переменную дали в параметрах - то сразу возврат???
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 16.09.2023, 11:36 [ТС] | ||
|
А насчет компилятора - так функция сама по себе тоже ничего не возвращает. Это тоже делает компилятор))) Но это так, болтология)))) Вот, например, в С все функции. Даже процедуры, которые "возвращают пустое значение void"
0
|
||
|
32 / 26 / 7
Регистрация: 22.02.2019
Сообщений: 111
|
||
| 16.09.2023, 12:49 | ||
|
Другое дело вопрос удобства.
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
||
| 16.09.2023, 14:11 [ТС] | ||
|
С учетом того, что NewInstance всего лишь враппер для InitInstance, где все завязано на том, что уже выделен некий участок памяти, который нужно проинициализировать соответствующим образом. Т.е, чтобы организовать экземпляр класса в статической памяти, нужно заранее объявить там какую-то переменную нужного размера (интересно как?), а затем передать ее адрес в InitInstance. Вот это "интересно как?" мне действительно интересно!)))))
0
|
||
|
32 / 26 / 7
Регистрация: 22.02.2019
Сообщений: 111
|
||||||
| 16.09.2023, 15:10 | ||||||
|
Делфей у меня уже много лет как нет. Можно попробовать FPC в качестве заменителя.
@s: $102FE58 o.Name: TMyObj_$102FE58 o.Value: 42
0
|
||||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
| 16.09.2023, 16:31 [ТС] | |
|
0
|
|
|
32 / 26 / 7
Регистрация: 22.02.2019
Сообщений: 111
|
|
| 16.09.2023, 17:31 | |
|
Размер буфера должен быть не меньше InstanceSize.
0
|
|
|
пофигист широкого профиля
4770 / 3207 / 862
Регистрация: 15.07.2013
Сообщений: 18,615
|
||
| 17.09.2023, 01:53 | ||
0
|
||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|||||||
| 17.09.2023, 13:30 [ТС] | |||||||
|
Например,
По поводу тайпкастинга, тоже иогу сказать, что не каждую функцию можно запихнуть в любое выражение. И тоже может потребоваться приведение типа))) P.S. В тех же С вообще процедур нет. Там есть только "функции, возвращающие пустое значение"
0
|
|||||||
| 17.09.2023, 13:37 | |
|
0
|
|
| 17.09.2023, 14:15 [ТС] | |
|
0
|
|
| 17.09.2023, 14:15 | |
|
how can i create mainmenu with any fonts wich i wont and how can i create mainmenu with diferent style? CREATE SEQUENCE - ошибка синтаксиса в "CREATE"
В строке заменить пробел между слов на запятую и пробел Заменить неразрывный пробел NBSP на обычный пробел в файле Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки
Правым кликом по серверу -> отладочная информация -> edit
Заменить "net": "raw", на "net": "tcp",
Нажать кнопку reload.
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
|
Запрет дублирования строк в табличной части
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) активировать флаг. . .
|