Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Понятие принципа создание динамических объектов 
:(
    Опции темы
mister2010
Дата 4.6.2010, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 25.5.2010

Репутация: нет
Всего: нет



А где вы видите этот только что созданный объект где он создался, я не вижу покажи в каком месте?
PM MAIL   Вверх
djamshud
Дата 4.6.2010, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Код

Box *d=new Box;


Вот здесь я вижу, что создался новый объект.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
bsa
Дата 4.6.2010, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



mister2010, почитай про указатели в FAQ.

любая переменная - это объект. переменные могут храниться в одной из 3-х областей памяти:
1. статическая (размещение переменной определяется на этапе компиляции и производится только 1 раз при запуске программы)
2. стековая (относительное размещение переменной определяется на этапе компиляции, а производится при каждом входе в функциональный блок)
3. динамическая (размещение переменных, количество, размер, назначение определяется при выполнении программы в зависимости от текущих действий).

Компилятор дает возможность программисту выбрать, где ему размещать переменную:
Код
int x; //статическая память
int main()
{
   static int y; //тоже статическая
   int z; //стековая
   new int; //динамическая
   malloc(sizeof(int)); //тоже динамическая
}


В этом примере теряется доступ к переменным в динамической памяти, так как не были сохранены их адреса. Чтобы исправить это, необходимо присвоить результат выполнения new и malloc некому указателю. Как написано в приведенном выше FAQ, указатель это такая переменная, которая содержит адрес другой переменной. Что называется "указывает":
Код
int main()
{
   int *p; //создаем переменную типа "указатель на int" в стековой области памяти
   p = new int; //создаем переменную типа int в динамической области памяти и присваиваем указатель на нее переменной p
   *p = 0; //присваиваем переменной в динамической памяти значение 0
   int *m = p; //создаем новый "указатель на int" и присваиваем ему значение p
   *m = 10; //присваиваем той же самой переменной в динамической памяти значение 10
   printf("%d == %d\n", *p, *m); //на экране получим 10 == 10
   delete m; //освобождаем память, выделенную под переменную в динамической памяти
   p = 0;
   m = 0; //зануляем указатели, так как дальнейшее использование переменной, на которую они ссылались, невозможно.
}


Это сообщение отредактировал(а) bsa - 4.6.2010, 12:41
PM   Вверх
mister2010
Дата 4.6.2010, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 25.5.2010

Репутация: нет
Всего: нет



Статичекая память выделяется оп. памябтью только на этапе компиляци только? Когда уже программа скомпилина, оперативная память работает с программой выделяя только ей стековую  и динамическую память и больше никакую?


Код

Box *d=new Box;
Вот здесь я вижу, что создался новый объект. 


Который имеет имя д? Или он есть а мы не знаем как он называется?
PM MAIL   Вверх
mes
Дата 4.6.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(mister2010 @  4.6.2010,  17:47 Найти цитируемый пост)
Статичекая память выделяется оп. памябтью только на этапе компиляци только?

на этапе компиляции ничего не выделяется...
не "статическая память" а область памяти предназначенная для хранения статических объектов.

Цитата(mister2010 @  4.6.2010,  17:47 Найти цитируемый пост)
Когда уже программа скомпилина, оперативная память работает с программой выделяя ей..

оперативная память ничего не выделяет - выделяет ось.

Цитата(mister2010 @  4.6.2010,  17:47 Найти цитируемый пост)
только стековую  и динамическую память и больше никакую?

с точки зрения программиста, есть три "стандартных"  вышеупомянутых хранилища.. Как они реализованы физически зависит от разработчиков.

p.s. правильней сказать не "три хранилища" , а "три способа хранения". за подробностями в книжку smile

Добавлено через 4 минуты и 46 секунд
Цитата(mister2010 @  4.6.2010,  17:47 Найти цитируемый пост)
Который имеет имя д? Или он есть а мы не знаем как он называется? 

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

Box *d             // созданному на стеке объекту-указетелю
       =           // присваиваем               
         new Box;  // адрес безымянного, созданного в куче, объекта.




--------------------
PM MAIL WWW   Вверх
bsa
Дата 4.6.2010, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



mister2010, рекомендую почитать книжки об устройстве компьютера, чтобы понимать какой узел за что отвечает. Чтобы не было потом "оперативная память выделяет". Это звучит так же, как "земля выделяет участок под посевы озимых".   smile 
PM   Вверх
mister2010
Дата 5.6.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 25.5.2010

Репутация: нет
Всего: нет



Скажите одно, в чём различие стековой памяти от статической в программировании?
PM MAIL   Вверх
mes
Дата 5.6.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(mister2010 @  5.6.2010,  13:57 Найти цитируемый пост)
Скажите одно, в чём различие стековой памяти от статической в программировании? 

в памяти никакой.. разница в способе обращения/работы с ней.. прежде всего посмотрите что есть _стек_ в программировании .. гугль в помощь. 
smile


--------------------
PM MAIL WWW   Вверх
Леопольд
Дата 7.6.2010, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 943
Регистрация: 17.6.2009

Репутация: 3
Всего: 13



mister2010, интернет + google = информация


--------------------
вопросов больше чем ответов
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0780 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.