Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
lest_
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 94
#1

Как создать объект класса в динамической памяти?

21.07.2014, 18:51. Просмотров 695. Ответов 3
Метки нет (Все метки)

привет. я так понял, можно создать объект в динамической области памяти. либо просто создать объект обычным способом, но чтобы его данные-члены были указателями на переменные в динамической памяти. я написал 2 варианта:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Создать объект в динамической памяти
#include <iostream>
using namespace std;
 
class SimpleCat
{
public:
    SimpleCat()
    {
        cout << "In the Constructor" << endl;
        itsAge = 1;
    }
    ~SimpleCat() { cout << "DESTRUCTOR" << endl; }
private:
    int itsAge;
};
 
int main()
{
    {
        SimpleCat* p = new SimpleCat;
        delete p;
        p = 0;  
    }
    system("pause");                
    return 0;     
}
Результат:
In the Constructor
DESTRUCTOR
Для продолжения нажмите любую клавишу...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// В качестве переменной-члена выступает указатель на переменную в динамической памяти
#include <iostream>
using namespace std;
 
class SimpleCat
{
public:
    SimpleCat()
    {
        cout << "In the Constructor" << endl;
        pAge = new int(2);
    }
    ~SimpleCat() 
    {
        cout << "DESTRUCTOR" << endl;
        delete pAge;
        pAge = 0;
    }
private:
    int* pAge;
};
 
int main()
{
    {
        SimpleCat Frisky;       
    }
    system("pause");                
    return 0;     
}
Результат тот же самый.
я хотел спросит: правильно ли я написал? и если правильно, то в чём вообще разница в этих способах? как надо в реальной программе писать?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2014, 18:51
Ответы с готовыми решениями:

Объект класса в динамической памяти
Привет. Вот листинг: #include &lt;iostream&gt; using namespace std; class...

Указатель,объект класса размещенный в динамической памяти
Ребят,такой маленький нелепый вопрос. Как можно обратиться к объекту класса...

Двумерный массив в динамической памяти как поле класса
Здравствуйте! Вот так можно описать двумерный массив в дин.памяти. class...

Можно ли создать объект класса с таким же именем как у самого класса?
Можно ли создать объект класса с таким же именем как у самого класса? Ну или...

Классы. Объявить массив динамически и сделать указатель на объект в динамической памяти
Я создал классы: ПЕРСОНА, служащий, роботодатель, инженер. Но мне нужно в...

3
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7024 / 3320 / 452
Регистрация: 04.12.2011
Сообщений: 9,255
Записей в блоге: 5
21.07.2014, 19:14 #2
Цитата Сообщение от lest_ Посмотреть сообщение
либо просто создать объект обычным способом, но чтобы его данные-члены были указателями на переменные в динамической памяти.
lest_, если Вы задаётесь такими вопросами, то сосредоточьтесь на создании динамических объектов. Логика подобъектов станет понятна позже, так как она подобна. Объект включающий динамические подобъекты сложнее "простого" объекта и использовать такое без необходимости пока не стоит.
Создавая "простой" объект в динамической памяти Вы берёте на себя ответственность по его уничтожению. Использовав new Вы где-то должны использовать delete. У "сложного" (имеющего динамические подобъекты) объекта, объектом будете по прежнему заниматься Вы, ведь никто не запретит Вам создать динамический объект и в этом случае, а подобъектами - сам объект (конструктор/деструктор). Но для "сложных" объектов нужно позаботиться о конструкторе копирования, так как предоставляемый по умолчанию, обычно не подходит в этом случае и скорее всего о операторе присваивания. Для простых "простых" (2 раза)) объектов в этом нет необходимости.
1
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.07.2014, 22:33 #3
Цитата Сообщение от lest_ Посмотреть сообщение
Результат тот же самый.
Если под результатом Вы понимаете последовательность вывода:
"In the Constructor"
"DESTRUCTOR"
"Для продолжения нажмите любую клавишу..."
, то можно и про такую программу сказать, что разницы нет:
C++
1
2
3
4
5
6
7
#include <iostream>
#include <cstdlib>
int main()
{
   std::cout << "In the Constructor\nDESTRUCTOR\n";
   std::system("pause");
}
Но вряд она Вам подойдет.
Поэтому, всё же стоит понять различия.
В первом случае создается весь объект SimpleCat в динамической памяти. Со всем своим содержимым (т.е. полем itsAge).
А во втором случае объект типа SimpleCat создается на стеке, а для поля pAge память выделяется в куче.
1
ValeryS
Модератор
7169 / 5436 / 674
Регистрация: 14.02.2011
Сообщений: 18,363
21.07.2014, 22:39 #4
lest_,
в первом случае тебе к членам класса нужно будет обращаться так
C++
1
 p->itsAge;
во втором так
C++
1
p.itsAge
пример конечно надуманный поскольку itsAge у тебя приватная
но я так чтобы показать разницу
прочитай что такое указатель
и только потом про динамическое выделение
иначе все перемешается
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2014, 22:39

Размещение класса в динамической памяти
Добрый день! Интересует такой вопрос, который я никак не пойму: Есть класс...

Обращение к свойству класса в динамической памяти
Здравствуйте! Возникла проблема с обращением к свойству класса,...

Выделение динамической памяти под массив из класса
Допустим, есть class c, и он включает в себя char-массив a: class c {...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru