|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.10.2013, 17:45 | #1 |
Пользователь
Регистрация: 16.10.2011
Сообщений: 67
|
Выделение памяти для объектов
Всем привет. Вопрос такой:
Есть класс Cat: public class Cat { Person owner; int a; } , где Person - класс следующего вида: public class Person { String name; int age; }. Возник такой вопрос: нужно ли после выделения памяти объекту типа Cat: Cat a; a = newCat(); выделять память для A.owner? Или она уже будет выделена? Заранее спасибо. |
08.10.2013, 20:28 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
в данном случае память будет выделена.
Другое дело, что это не самый лучший вариант - например что будет, если у меня две кошки или кошка и собака? Получатся несколько разных копий Person но с одним и тем же содержанием. |
08.10.2013, 22:00 | #3 |
personality
Старожил
Регистрация: 28.04.2009
Сообщений: 2,885
|
Нет, позвольте не согласиться с Вами, waleri, хотя по сути то Вы правы. Память для хранения ссылки на объект Person выделится, но т.к. Person - класс , то он не будет создан, память под сам объект не будет выделена, т.к. нигде не вызывается new Person. В этом легко убедиться, вызывав после a = newCat(); команду MessageBox.Show (a.owner.age.ToString()); (правда для этого надо установить поля классов атрибуты доступа public) - при попытке выполнения этого кода произойдёт исключение доступа к недоступной памяти, т.е. объекта в памяти нет, и его ссылка (owner-поле в классе Cat) указывает на null.
А вот если сделать Person не классом, а struct'ом, то шоумесадж покажет 0, т.к. под структуры выделяется память и их поля инициализируются значениями по умолчанию, для целых чисел это будет 0, но со строкой не прокатит, ибо она сама по себе "указатель" и инициализируется в null и попытка её чтения тоже даст исключение. Последний раз редактировалось phomm; 08.10.2013 в 22:19. |
09.10.2013, 11:24 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Ops, виноват, не углядел конструкцию public class - думал, что это С++...
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выделение памяти для нужд C++ библиотеки | 220Volt | Общие вопросы C/C++ | 25 | 12.01.2013 21:18 |
Ограничение/выделение памяти для приложений(программ) | gekap404 | Win Api | 1 | 13.03.2012 14:30 |
Выделение памяти для строк | virtuhay266 | Общие вопросы C/C++ | 4 | 05.12.2011 23:52 |
Динамическое выделение памяти под массив объектов со специализированным конструктором | capta1n | Общие вопросы C/C++ | 6 | 07.03.2010 16:01 |
Выделение памяти в функции для переданных параметров | LinuxUser | Общие вопросы C/C++ | 1 | 12.11.2007 19:21 |