Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Размещение в памяти полей класса  (Прочитано 7994 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dmitry
Помогающий

ru
Offline Offline

« : 29-05-2010 15:47 » 

Есть класс
Код:
class A
{
   classB b;
}

Динамически создаём экземпляр этого класса - A *a = new A(). Как я понимаю, при этом создаётся конструктором по умолчанию экземпляр класса B и помещается в стек (экземпляр класса A естественно в куче). Получается, что время жизни b определяется (равно) временем жизни указателя a. И единственный проблемный момент тут - если указатель a - глобальная переменная, т.е. находится в статической памяти. В общем, вопросов пока нет, просто хочется убедиться, что я правильно всё понимаю  Улыбаюсь
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 29-05-2010 15:52 » 

от времени жизни указателя напрямую ничего не зависит, ведь это всего лишь хранилище адреса. А вот память, выделенная под b (в составе памяти вообще под экземпляр класса A) - живёт вместе с экземпляром класса A. Ведь это одно целое
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 29-05-2010 15:54 » 

я только не понял кое-что

class A
{
   classB b;
}

 - тут синтаксическая ошибка. Поэтому уточни условие )

может, так
Код:
class B
{
   ...
};

class A
{
   B b;
};

Записан

resource
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 29-05-2010 17:42 » 

Интересно на самом деле, что экземпляр класса B оказывается в стэке. Не очень себе представляю как такое возможно.
Записан
Dmitry
Помогающий

ru
Offline Offline

« Ответ #4 : 29-05-2010 17:46 » 

Алексей, да, как ты написал, есть классы A и B.

 
Цитата
А вот память, выделенная под b (в составе памяти вообще под экземпляр класса A) - живёт вместе с экземпляром класса A. Ведь это одно целое
Теперь удивляюсь, как я мог так заблуждаться... Почему-то, если бы там было B *b, или int b, то я знаю, что память под них выделилась бы в куче в составе всей памяти, представляющей экземпляр класса. А тут что-то запутался. Спасибо, что наставил на путь истинный.
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #5 : 31-05-2010 03:51 » new

Интересно на самом деле, что экземпляр класса B оказывается в стэке. Не очень себе представляю как такое возможно.

ты о чём?
Записан

Странно всё это....
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines