Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2013, 17:45   #1
Joose
Пользователь
 
Регистрация: 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? Или она уже будет выделена? Заранее спасибо.
Joose вне форума Ответить с цитированием
Старый 08.10.2013, 20:28   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,342
По умолчанию

в данном случае память будет выделена.
Другое дело, что это не самый лучший вариант - например что будет, если у меня две кошки или кошка и собака? Получатся несколько разных копий Person но с одним и тем же содержанием.
waleri вне форума Ответить с цитированием
Старый 08.10.2013, 22:00   #3
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 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.
phomm на форуме Ответить с цитированием
Старый 09.10.2013, 11:24   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,342
По умолчанию

Ops, виноват, не углядел конструкцию public class - думал, что это С++...
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение памяти для нужд 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