2 / 2 / 0
Регистрация: 09.11.2011
Сообщений: 85
|
|||||||||||
1 | |||||||||||
Где выделяется память под объекты24.08.2016, 12:28. Показов 2144. Ответов 10
Метки нет (Все метки)
Здравствуйте.Подскажите ,пожалуйста ,с небольшим недопониманием насчёт выделения памяти под объекты.
Например ,есть функция
И в чём отличие от :
0
|
24.08.2016, 12:28 | |
Ответы с готовыми решениями:
10
Где выделяется память под массив Не выделяется память под массив Как выделяется память под структуры? Как выделяется память под массив string? |
24.08.2016, 14:13 | 2 |
в данном случае нигде вообще ничего не выделяется
объект не создается результат даст указатель на память, которая была в стеке вызванной функции, т.е. гарантированно AV Добавлено через 1 минуту выделение происходит при вызове конструктора КЛАССА x:=TAnyObject.Create;
1
|
2 / 2 / 0
Регистрация: 09.11.2011
Сообщений: 85
|
|
24.08.2016, 20:01 [ТС] | 3 |
krapotkin, спасибо за ответ! Извините ,а что такое "AV" ?
Если мы вызовем конструктор класса ,где он выделит память ?
0
|
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
|
|
24.08.2016, 20:05 | 4 |
1
|
Заблокирован
|
|
26.08.2016, 11:37 | 6 |
Память под объекты выделяется в куче. См. "Виртуальные конструкторы".
Код
function foo(...) : AnyObject var x: AnyObject; begin x.Create; Result:=x; end Код
function foo(...) : AnyObject var x: ^AnyObject; // типизированный указатель. Поскольку он никуда не указывает, при попытке вызова x.Create будет АV. begin x.Create; Result:=x; end
0
|
Заблокирован
|
|
26.08.2016, 20:01 | 8 |
Ок. Неправильный. Не заметил сослепу.
Код
function foo(...) : AnyObject var x: AnyObject; // объект будет создан в куче. Поэтому, несмотря на то, что переменная x локальная, менеджер памяти по выходе из функции затрёт только ее, а не память, на которую она ссылается. begin x:=AnyObject.Create; Result:=x; end
0
|
2 / 2 / 0
Регистрация: 09.11.2011
Сообщений: 85
|
|
28.08.2016, 21:34 [ТС] | 9 |
AllFree, спасибо за пояснение ! Но как тогда вообще написать функцию ,что возвращает объект ?
0
|
28.08.2016, 23:04 | 10 | |||||
да как угодно...
(только если создали объект, не забывайте его потом где-нибудь разрушить)
0
|
пофигист широкого профиля
4732 / 3167 / 858
Регистрация: 15.07.2013
Сообщений: 18,248
|
|
29.08.2016, 01:45 | 11 |
0
|
29.08.2016, 01:45 | |
29.08.2016, 01:45 | |
Помогаю со студенческими работами здесь
11
Почему не выделяется память под двумерный массив? Где выделяется память для возвращаемого значения функций? Объясните как выделяется память под умные указатели Рекурсия: как выделяется память под рекурсивный вызов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |