|
|
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
Допустим,что есть некая ф-я которая возвращает объект: Код: pascal 1. 2. 3. 4. И в теле другой процедуры пишем: Код: pascal 1. Будет ли здесь утечка памяти, ведь объект не инициализирован. Хотя сам чувствую, что будет и надо бы перед этой строкой инициализировать объект, а ниже его уничтожить, но: - tsomeclass требует оунера (пока не вижу нужды в конкретике) - на freeandnil, если делать инициализацию/уничтожение, даёт ошибку. Может быть надо инициализировать оунера, потом его собственность tsomeclass. Потом уничтожать оунера и someclass последует за ним? Пробовал так, но someclass не уничтожается после фриенднила оунера. Так можно ли сделать сабж и забыть про этот страшный сон? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2018, 09:50 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
Jagare, безотносительно всех написанных странностей главный вопрос остался за кадром: зачем всё это безобразие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2018, 11:04 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
makhaon, Есть код стиля, есть функция, которая возвращается tcxstyle, надо получить значение color и textcolor для этого кода. Но меняет ли это суть вопроса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2018, 11:14 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
Никакой утечки не будет. Надо бояться access violation, который вылезет, если внутри этого метода "c" есть обращения к внутренностям объекта, которые на момент вызова не инициализированы и "содержат мусор". P.S. Незачем скрывать свой код. Тем более, если там участвуют сторонние компоненты типа девок -- у них есть куча особенностей. И вообще, есть свои методы для работы с теми же стилями. Надо рассказать об оригинальной задаче и уже по ней спрашивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2018, 11:29 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
Подключенный fastmm в режиме fulldebug даст тебе больше ответов чем форум ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2018, 16:52 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
white_nigger, ну вот ко всем тараканам еще и фастмм ему, да-да. Jagare, Что значит "объект (не) инициализирован"? Создан/не создан, что ли? Если есть опасения, что объект не создан, перед использованием его - проверяй. С нил сравнивай, раз твоя функция либо возвращает объект, либо возвращает нил. Если проблема во времени жизни объекта ("кто должен убивать уже ненужные объекты ") - то тут все зависит от конкретной ситуации. Если твоя функция сама создает объекты, то, возможно, после использования объектов ты должен сам их освобождать. А возможно - не должен, если объекты создаются в контейнере, отвечающем за время жизни вложенных объектов. А если твоя функция лишь возвращает ссылку на существующие объекты - то, скорее всего, их убивать не следует. В общем, все зависит от ситуации, ты должен сам знать, что делаешь, волшебных рецептов нет. Такие дела. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2018, 17:06 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
Котовасия, ... вот именно поэтому я и дал такой совет, вместо того чтобы городить "простынь"-угадайку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2018, 18:00 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
Я как понимаю, первый аргумент функции принимает Self объект в памяти, который может бы уже где - то освобождённым. По этому ТС то и думает, что объекта может и не быть уже по тому адресу который бы он мог вернуть. И хочет вернуть другой объект который будет по умолчанию. Только непонятно зачем же он взял и обкорнал функцию. По рукам его за это ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.09.2018, 23:55 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
JaDi, c это всего-лишь свойство. Благодарю за ответ с утечкой успокоили. Но почему всё-таки не получается уничтожить объект? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 22:30 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
JagareJaDi, c это всего-лишь свойство. Благодарю за ответ с утечкой успокоили. Но почему всё-таки не получается уничтожить объект? С чего решил, что утечки не будет? Если ты не понимаешь, что делаешь - обязательно будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 22:35 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
Jagare, Если в параметре будет реально не инициализированный объект передаваться (не nil, а именно случайный мусор) -- то гарантированно никак не уничтожить. Поэтому надо найти код, который вызывает somefun() и в нем убедиться, чтобы передавался или реальный объект, или nil. Тогда внутри самой функции можно спокойно вызвать FreeAndNil(defobj) -- он гарантированно освободит объект (и вообще, именно эту конструкцию с FreeAndNil и рекомендуют использовать для уничтожения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2018, 22:57 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
Jagare, будет не утечка памяти, а Access Violation либо плавающий глюк, что еще хуже. Такой глюк потом можно месяц искать. Если вы что то возвращаете из функции, вы обязаны ВСЕГДА это инициализировать, даже если это не объект. Вам warning компилятор не просто так выдает. Поэтому поставьте хотя бы Result := nil в начале процедуры. А вообще ваш код это лютый ужас. Но чтобы его исправить надо знать больше, для чего вам это пришло в голову делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2018, 01:35 |
|
||
|
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
|
|||
|---|---|---|---|
|
#18+
По приведённому примеру никак не определить что будет или не будет. Смотря что в вырезанных местах кода и смотря как использовать. Но в любом случае "ставить точку" сразу после вызова функции - довольно плохой стиль. А проверять существование объекта как бы желательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2018, 10:00 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39696781&tid=2040366]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
188ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 240ms |
| total: | 540ms |

| 0 / 0 |
