С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
lest_
0 / 0 / 0
Регистрация: 28.11.2013
Сообщений: 94
#1

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

21.07.2014, 18:51. Просмотров 502. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как создать объект класса в динамической памяти? (C++):

Объект класса в динамической памяти - C++
Привет. Вот листинг: #include &lt;iostream&gt; using namespace std; class SimpleCat { public: SimpleCat(int age, int weight) {...

Указатель,объект класса размещенный в динамической памяти - C++
Ребят,такой маленький нелепый вопрос. Как можно обратиться к объекту класса созданному в динамической памяти(через &quot;new&quot;)?; В моей книге...

Двумерный массив в динамической памяти как поле класса - C++
Здравствуйте! Вот так можно описать двумерный массив в дин.памяти. class nameClass { public: MapPlaceTp ** roomMap; ...

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

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

Обращение к свойству класса в динамической памяти - C++
Здравствуйте! Возникла проблема с обращением к свойству класса, расположенному в динамической памяти. Пойду по порядку. Создаю вот...

3
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6513 / 3150 / 309
Регистрация: 04.12.2011
Сообщений: 8,720
Записей в блоге: 5
21.07.2014, 19:14 #2
Цитата Сообщение от lest_ Посмотреть сообщение
либо просто создать объект обычным способом, но чтобы его данные-члены были указателями на переменные в динамической памяти.
lest_, если Вы задаётесь такими вопросами, то сосредоточьтесь на создании динамических объектов. Логика подобъектов станет понятна позже, так как она подобна. Объект включающий динамические подобъекты сложнее "простого" объекта и использовать такое без необходимости пока не стоит.
Создавая "простой" объект в динамической памяти Вы берёте на себя ответственность по его уничтожению. Использовав new Вы где-то должны использовать delete. У "сложного" (имеющего динамические подобъекты) объекта, объектом будете по прежнему заниматься Вы, ведь никто не запретит Вам создать динамический объект и в этом случае, а подобъектами - сам объект (конструктор/деструктор). Но для "сложных" объектов нужно позаботиться о конструкторе копирования, так как предоставляемый по умолчанию, обычно не подходит в этом случае и скорее всего о операторе присваивания. Для простых "простых" (2 раза)) объектов в этом нет необходимости.
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
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
Модератор
6729 / 5138 / 485
Регистрация: 14.02.2011
Сообщений: 17,247
21.07.2014, 22:39 #4
lest_,
в первом случае тебе к членам класса нужно будет обращаться так
C++
1
 p->itsAge;
во втором так
C++
1
p.itsAge
пример конечно надуманный поскольку itsAge у тебя приватная
но я так чтобы показать разницу
прочитай что такое указатель
и только потом про динамическое выделение
иначе все перемешается
1
21.07.2014, 22:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2014, 22:39
Привет! Вот еще темы с ответами:

Выделение динамической памяти под массив из класса - C++
Допустим, есть class c, и он включает в себя char-массив a: class c { private: char a; public: c(); c(char* a); }

Как создать объект класса в потоке? - C++
Как создать объект класса в потоке? Это вообще возможно?

Утечка памяти при создании динамической переменной класса - C++
Никак не могу исправить проблему утечки памяти при создании динамической переменной класса class Ship { private: int maxHeight; ...

Как создать объект класса с двумя параметрами? - C++
#include &lt;iostream&gt; using namespace std; class rational{ public: rational(int numerator = 0, int denominator =...


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

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

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