powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
13 сообщений из 13, страница 1 из 1
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39696765
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим,что есть некая ф-я которая возвращает объект:
Код: pascal
1.
2.
3.
4.
Function somefun(someprm: integer; defobj:tsomeclass = nil): tsomeclass;
Begin
If someprm<>0 then ... else result:= defobj
End;


И в теле другой процедуры пишем:
Код: pascal
1.
a:= somefun(b).c;


Будет ли здесь утечка памяти, ведь объект не инициализирован.
Хотя сам чувствую, что будет и надо бы перед этой строкой инициализировать объект, а ниже его уничтожить, но:
- tsomeclass требует оунера (пока не вижу нужды в конкретике)
- на freeandnil, если делать инициализацию/уничтожение, даёт ошибку.
Может быть надо инициализировать оунера, потом его собственность tsomeclass. Потом уничтожать оунера и someclass последует за ним? Пробовал так, но someclass не уничтожается после фриенднила оунера.
Так можно ли сделать сабж и забыть про этот страшный сон?
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39696779
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagare,

безотносительно всех написанных странностей главный вопрос остался за кадром: зачем всё это безобразие?
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39696781
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,
Есть код стиля, есть функция, которая возвращается tcxstyle, надо получить значение color и textcolor для этого кода.
Но меняет ли это суть вопроса?
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39696783
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никакой утечки не будет. Надо бояться access violation, который вылезет, если внутри этого метода "c" есть обращения к внутренностям объекта, которые на момент вызова не инициализированы и "содержат мусор".

P.S. Незачем скрывать свой код. Тем более, если там участвуют сторонние компоненты типа девок -- у них есть куча особенностей. И вообще, есть свои методы для работы с теми же стилями. Надо рассказать об оригинальной задаче и уже по ней спрашивать.
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39696862
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подключенный fastmm в режиме fulldebug даст тебе больше ответов чем форум
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39696867
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

ну вот ко всем тараканам еще и фастмм ему, да-да.

Jagare,

Что значит "объект (не) инициализирован"?
Создан/не создан, что ли? Если есть опасения, что объект не создан, перед использованием его - проверяй. С нил сравнивай, раз твоя функция либо возвращает объект, либо возвращает нил.
Если проблема во времени жизни объекта ("кто должен убивать уже ненужные объекты ") - то тут все зависит от конкретной ситуации. Если твоя функция сама создает объекты, то, возможно, после использования объектов ты должен сам их освобождать. А возможно - не должен, если объекты создаются в контейнере, отвечающем за время жизни вложенных объектов. А если твоя функция лишь возвращает ссылку на существующие объекты - то, скорее всего, их убивать не следует.
В общем, все зависит от ситуации, ты должен сам знать, что делаешь, волшебных рецептов нет.
Такие дела.
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39696882
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Котовасия,
... вот именно поэтому я и дал такой совет, вместо того чтобы городить "простынь"-угадайку
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39696943
Гирлионайльдо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я как понимаю, первый аргумент функции принимает Self объект в памяти, который может бы уже где - то освобождённым. По этому ТС то и думает, что объекта может и не быть уже по тому адресу который бы он мог вернуть. И хочет вернуть другой объект который будет по умолчанию.

Только непонятно зачем же он взял и обкорнал функцию. По рукам его за это
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39698760
Jagare
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDi, c это всего-лишь свойство.
Благодарю за ответ с утечкой успокоили.
Но почему всё-таки не получается уничтожить объект?
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39698762
Котовасия
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JagareJaDi, c это всего-лишь свойство.
Благодарю за ответ с утечкой успокоили.
Но почему всё-таки не получается уничтожить объект?
С чего решил, что утечки не будет? Если ты не понимаешь, что делаешь - обязательно будет.
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39698770
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagare,

Если в параметре будет реально не инициализированный объект передаваться (не nil, а именно случайный мусор) -- то гарантированно никак не уничтожить.

Поэтому надо найти код, который вызывает somefun() и в нем убедиться, чтобы передавался или реальный объект, или nil. Тогда внутри самой функции можно спокойно вызвать FreeAndNil(defobj) -- он гарантированно освободит объект (и вообще, именно эту конструкцию с FreeAndNil и рекомендуют использовать для уничтожения).
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39698792
Eugene New
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Jagare,

будет не утечка памяти, а Access Violation либо плавающий глюк, что еще хуже. Такой глюк потом можно месяц искать. Если вы что то возвращаете из функции, вы обязаны ВСЕГДА это инициализировать, даже если это не объект. Вам warning компилятор не просто так выдает.

Поэтому поставьте хотя бы
Result := nil
в начале процедуры.

А вообще ваш код это лютый ужас. Но чтобы его исправить надо знать больше, для чего вам это пришло в голову делать.
...
Рейтинг: 0 / 0
Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
    #39708199
QT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
QT
Гость
По приведённому примеру никак не определить что будет или не будет. Смотря что в вырезанных местах кода и смотря как использовать.
Но в любом случае "ставить точку" сразу после вызова функции - довольно плохой стиль. А проверять существование объекта как бы желательно.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Можно ли использовать использовать объект, возвращаемый функцией без инициализации объекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]