Форум программистов, компьютерный форум CyberForum.ru

Понятие принципа создания динамических объектов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 51, средняя оценка - 4.88
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
04.06.2010, 01:27     Понятие принципа создания динамических объектов #1
Например я написал такой код:
Код
#include <iostream>
#include <string>

using namespace std;

class Box
{
     public:
           double width;
           int z;
           Box(char *u) { cout<<u<<endl; };
		   Box(int rediska) { cout<<rediska; };
           Box() {};
     };

int main()
{
     setlocale(0,"");

     Box *d1 = new Box("Привет клоун");
     Box *d2 = new Box(7);
     Box * lyk = new Box;
     Box(); 

     delete d1;
     delete d2;

     cin.get();
}
Для того чтоб создать объект статически, то есть память по которой будет хранится объект это стек - память выделяемая во время выполнения для моего екзе ОП памятью. То есть вот это
Код
Box induk; //Создание объекта который будет иметь имя индюк
Когда же я написал:
Код
Box * lyk = new Box;
Это означает что я объявил указатель под названием лук, который ссылается на область памяти по которой лежит что-то из класса, и этот указатель лук после того как сослался на область памяти по которой к примеру лежит переменная z из класса Box, указатель лук присваивает себе эту область памяти;

1)Где тут создается объект динамический, если это указатель на что-то из класса?
2)Почему, чтоб получить доступ динамически к классу нужно именно
писать имя указателя который содержит в себе область памяти по которой лежит что-то из класса?

Добавлено через 3 часа 40 минут
Что, никто не знает что ли?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
04.06.2010, 03:27     Понятие принципа создания динамических объектов #2
C++
1
Box * lyk = new Box;
создаётся переменная lyk, она имеет тип указатель на объект типа Box
значит она может хранить адрес объекта типа Box
new Box - выделяет память для объекта типа Box, возвращает адрес этой памяти
адрес выделенной памяти записывается в переменную lyk

всё это можно записать так
C++
1
2
3
4
5
6
7
8
    Box *lyk;
 
    lyk = new Box;
 
    cout << lyk->z << endl;
 
    delete lyk; // из переменной lyk взяли адрес памяти и передали его оператору delete
                // он дальше сам занимается
Добавлено через 2 минуты
смысл в том, что в переменную lyk можно записывать новый адрес
записали, поюзали, освободили, выделили новый, записали, поюзали, освободили ...
также туда можно записывать адрес просто любого объекта типа Box, даже если он создан не через new
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
04.06.2010, 08:03     Понятие принципа создания динамических объектов #3
Для того чтоб создать объект статически, то есть память по которой будет хранится объект это стек - память выделяемая во время выполнения для моего екзе ОП памятью.
стек используется совсем не для того, в нем ни чего не хранится (тем более объекты), он служит для временного хранения каких-либо значений, либо для передачи аргументов ф-циям, вобщем по всякому бывает, но он ни чего не хранит!
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
04.06.2010, 20:30  [ТС]     Понятие принципа создания динамических объектов #4
1)Статичекая память выделяется оп. памябтью только на этапе компиляци только? Когда уже программа скомпилина, оперативная память работает с программой выделяя только ей стековую и динамическую память и больше никакую?

2)Box *d = new Box;
d это только переменная которая будет содержать адрес объекта, а почему объекта?

Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
05.06.2010, 12:14     Понятие принципа создания динамических объектов #5
Цитата Сообщение от mister2010 Посмотреть сообщение
1) оперативная память работает с программой выделяя только ей стековую и динамическую память и больше никакую?
в каждой программе есть определенный объем памяти, которая предназначена для стека и "кучи", ну и собственно сам код. Советую что-нибудь почитать на эту тему.

2)Box *d = new Box;
d это только переменная которая будет содержать адрес объекта, а почему объекта?
d - это переменная, которая содержит адрес указанного типа данных, в данном случае это тип Box, т.е. объект класса.

Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
да, это тоже самое, что d.ser()
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
05.06.2010, 16:03  [ТС]     Понятие принципа создания динамических объектов #6
Код
Box *d = new Box; 
d->f(); //Это вызов функции объекта класса через указатель.
Где здесь объект класса?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 16:09     Понятие принципа создания динамических объектов #7
Цитата Сообщение от mister2010 Посмотреть сообщение
Где здесь объект класса?
Объект не "здесь" или "там". Объект в памяти. В стеке или в куче - в зависимости от таго как объект создан.

К членам объекта можно обращатся напрямую:
C++
1
2
ClassName object;
object.FunctionName();
или косвенно, через указатель:
C++
1
2
ClassName* object = new ClassName;
object->FunctionName();
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
05.06.2010, 16:19     Понятие принципа создания динамических объектов #8
Цитата Сообщение от mister2010 Посмотреть сообщение
Код
Box *d = new Box; 
d->f(); //Это вызов функции объекта класса через указатель.
Где здесь объект класса?
на него (объект) указывает d, поэтому к ф-ции обращение через оператор "стрелка"

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Объект в памяти. В стеке или в куче - в зависимости от таго как объект создан.
А что, объект может хранится в стеке??? Что-то я сомневаюсь.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 16:26     Понятие принципа создания динамических объектов #9
Цитата Сообщение от Kastaneda Посмотреть сообщение
А что, объект может хранится в стеке??? Что-то я сомневаюсь.
Хорошо, что по твоему такое стек и по каким причинам в нем не может храниться объект?
И где он храниться, если не рамещен в куче оператором new?
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
05.06.2010, 16:46     Понятие принципа создания динамических объектов #10
Ну я может не правильно выразился. Да, в стеке хранятся временные объекты, до выхода из области видимости. А все невременные в сегменте данных, хотя для Windows это условности (всмысле сегменты).

Добавлено через 6 минут
Хотя сейчас погуглил, блин странно все это... Похоже объекты хранятся в стеке. Просто я на С++ после ASM'а перешел и меня удивляет такое использование стека.

Добавлено через 7 минут
Да, объекты хранятся в стеке!
CyBOSSeR, а почему вы меня не поправили в 3ем посту (посте , хз))? Я до сих пор о стеке думал в формате ASM
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
05.06.2010, 16:46  [ТС]     Понятие принципа создания динамических объектов #11
В чём различие стековой памяти от статической в программировании?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 17:14     Понятие принципа создания динамических объектов #12

Не по теме:

Цитата Сообщение от Kastaneda Посмотреть сообщение
CyBOSSeR, а почему вы меня не поправили в 3ем посту (посте , хз))?
Видать не заметил.
Цитата Сообщение от Kastaneda Посмотреть сообщение
Я до сих пор о стеке думал в формате ASM
Ну чтож, придеться перестраиваться на C++.



Добавлено через 21 минуту
Цитата Сообщение от mister2010 Посмотреть сообщение
В чём различие стековой памяти от статической в программировании?
mister2010, не забивай себе голову.
Просто запомни, объект может располагаться либо в стеке, либо в куче.
mister2010
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 64
05.06.2010, 17:16  [ТС]     Понятие принципа создания динамических объектов #13
C
1
Просто запомни, объект может располагаться либо в стеке, либо в куче.
Статический объект или динамический?
А для чего тогда статическая память ,если стековая память и динамическая память предназначена для дин. объектов?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
05.06.2010, 17:42     Понятие принципа создания динамических объектов #14
Цитата Сообщение от mister2010 Посмотреть сообщение
Статический объект или динамический?
Хорошо, давай так. Перечисли свою "классификацию" (статический, динамический и т.д.) объектов и что ты под этим подразумаваешь.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.06.2010, 08:57     Понятие принципа создания динамических объектов #15
Цитата Сообщение от mister2010
Если я напишу d->ser(); Где тут указание на объект?
Это указатель на функцию класса.
d указатель на объект (хранит адрес объекта), операция -> разыменовывает указатель и получает доступ к объекту, обращается к методу экземпляра класса
в С++ экземпляр класса могут называть объектом
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2010, 13:23     Понятие принципа создания динамических объектов
Еще ссылки по теме:

Нехватка памяти при создании динамических объектов C++
C++ Динамический массив динамических объектов
C++ Зачем нужно освобождать память динамических объектов в деструкторе, если всё равно это сделает менеджер памяти

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nick Alte
Эксперт С++
1591 / 983 / 116
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
06.06.2010, 13:23     Понятие принципа создания динамических объектов #16
Память под статический объект выделяется на этапе компиляции. Грубо говоря, они размещаются в самом исполняемом файле. Глобальные статические объекты инициализируются до выполнения main, локальные - при первом заходе в содержащую их функцию. Разрушаются после выхода из main.
Автоматические объекты размещаются на стеке. Выделение памяти и инициализация происходит при заходе в область видимости (scope), разрушается объект при выходе из этой области.
Динамические объекты создаются и разрушаются по ходу выполнения программы явным образом. А когда их забывают вовремя уничтожить, тут-то и начинается веселье и утечки памяти и других ресурсов.
Yandex
Объявления
06.06.2010, 13:23     Понятие принципа создания динамических объектов
Ответ Создать тему
Опции темы

Текущее время: 16:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru