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

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

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

Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? - C++

29.08.2013, 18:23. Просмотров 402. Ответов 9
Метки нет (Все метки)

Доброго времени суток! Подскажите, пожалуйста, есть ли разница в количестве задействованной памяти если объект класса создавать через указатель(как в данном случае) или обычым образом(Car myCar; ) в данной программе? Ведь после вывода последнего сообщения программа завершается и память, выделенная под программу, освобождается.
Или выигрыш с памятью был бы в случае, если бы на этом программа не завершалась, но данный объект уже был бы не нужен?

Файл Class.h:

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
 class Car {
    public: 
 
        std::string getName(){
            return name;
        }
 
        void setName(std::string car_name) {
            name = car_name;
        }
 
        int getSpeed(){
            return speed;
        }
 
        void setSpeed(int car_speed){
            speed = car_speed;
        }
 
    private:
        
        std::string name;
        int speed;
};
Файл Car.cpp:
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
 #include <iostream>
#include "Class.h"
 
int main() {
    
    Car *myCar = new Car;
    std::string name;
    int speed;
 
    std::cout << "Input car name: ";
    getline(std::cin,name);
 
    std::cout << "Input speed for " << name << ": ";
    std::cin >> speed;
 
    myCar->setName(name);
    myCar->setSpeed(speed);
 
    std::cout << "Car name is " << myCar->getName() << " and it speed is " << myCar->getSpeed() << std::endl;
 
delete myCar;
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2013, 18:23     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе?
Посмотрите здесь:

Модификация объекта string через ссылку и указатель - C++
Создайте две функции: первая должна получать аргумент типа string*, вторая - srting&amp;. Каждая функция должна изменять объект string своим...

Создание копии объекта используя объявление через указатель - C++
Здравствуйте. Имеется такой код: #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class medicament { private: ...

Адрес объекта в памяти при наследовании - C++
Здравствуйте. Имею вот такой код: class ClassA { public ClassA(void *ptr1) { void *ptr2 = this; } }

Ошибка при попытке разыменовать указатель, который размещен в динамической памяти другим процессом - C++
Доброго времени суток. Есть родительский процесс, он запускает через createProcess дочерний процесс, передавая ему в командной строке...

Конструктор копии: при возвращении объекта ошибка памяти - C++
Реализация класса: #include&quot;Class_Taxi.h&quot; #include&lt;fstream&gt; #include&lt;conio.h&gt; using namespace std; Zakaz::Zakaz() { ...

Одномерный массив, статическое выделение памяти, ошибка в объявлении - C++
Здравствуйте. Снова надеюсь на вашу помощь.:confusion: В двух массивах записаны результаты 20 игр двух футбольных команд (если игра...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2013, 18:27     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #2
Цитата Сообщение от qazc Посмотреть сообщение
Подскажите, пожалуйста, есть ли разница в количестве задействованной памяти если объект класса создавать через указатель(как в данном случае) или обычым образом(Car myCar; ) в данной программе?
Количество памяти задействуется одно и тоже, но в разных областях памяти: через указатель - в динамической памяти, обычнам обрзом - на стеке.
Цитата Сообщение от qazc Посмотреть сообщение
Или выигрыш с памятью был бы в случае, если бы на этом программа не завершалась, но данный объект уже был бы не нужен?
Да. На стеке объект будет храниться до окончания программы, если же вы создали объект динамически, то можете в любой момент освободить память под ним.
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
29.08.2013, 18:45     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #3
Цитата Сообщение от alsav22 Посмотреть сообщение
через указатель - в динамической памяти
Правильней сказать "через new", потому как указатель может указывать и на стековый объект.
Цитата Сообщение от alsav22 Посмотреть сообщение
На стеке объект будет храниться до окончания программы
Объект на стеке будет разрушен при выходе из области видимости, т.е. можно сделать так
C++
1
2
3
4
5
6
int main()
{
    {
        myclass ob;
    } // здесь объект ob будет разрушен и занимаемая им память будет считаться свободной
}
qazc
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 26
29.08.2013, 18:59  [ТС]     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #4
Kastaneda, alsav22, спасибо!
alsav22
29.08.2013, 19:03
  #5

Не по теме:

Kastaneda, с исправлениями согласен, но (в качестве оправдания за неточности) я писал ответ на конкретный вопрос, по конкретному коду:

Цитата Сообщение от qazc Посмотреть сообщение
через указатель(как в данном случае) или обычым образом(Car myCar; ) в данной программе?

zer0mail
2330 / 1956 / 192
Регистрация: 03.07.2012
Сообщений: 7,013
Записей в блоге: 1
29.08.2013, 21:55     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #6
Выделение динамической памяти происходит порциями и минимальная порция может быть на порядок больше, чем требуемая, а стек действует экономней и быстрее (но у него запасов меньше).

Хотя для данного примера это чисто теоретический нюанс.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
30.08.2013, 01:02     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #7
Kastaneda
Это описано стандартном? Просто я читал что некоторые компиляторы вытягивают объявление переменной из блока.
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
30.08.2013, 09:33     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #8
Цитата Сообщение от kvadro Посмотреть сообщение
Это описано стандартном?
Это описано в любой книге для начинающих. Думаю в стандарте это тоже есть, просто мне сейчас лень искать.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
30.08.2013, 12:03     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #9
Это описано в любой книге для начинающих.
Я это прекрасно знаю, я говорю про то, что читал, что некоторые компиляторы вытягивают переменные из блока.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2013, 12:17     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе?
Еще ссылки по теме:

Преобразование типа при вызове виртуального метода через указатель на базовый класс - C++
Доброго времени суток. Наткнулся на вот такой вопрос в сети и пока что не смог на него ответить, может быть у Вас получится: В каких...

Указатель и инициализация объекта класса - C++
Здраствуйте! Имеется большой класс импортирующий данные из файлов 3D-модели. В моём приложении он будет инициализироваться один раз для...

При выделении памяти через malloc, как создавать объекты ? - C++
Выделяю память через malloc под 4 объекта, как их создать ? myClass * ptr = (myClass*) malloc(sizeof(myClass)*4); for(int i = 0;...

Как создать копию объекта, зная его указатель? - C++
Здравствуйте, существует следующая проблема. В своей программе я рисую график используя класс QwtPolarPlot. По нажатию на график, должно...


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

Или воспользуйтесь поиском по форуму:
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
30.08.2013, 12:17     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #10
Заглянул в стандарт (правда 2003г.), вот
3.7.2
Local objects explicitly declared auto or register or not explicitly declared static or extern have
automatic storage duration. The storage for these objects lasts until the block in which they are created
exits.
и далее в 6.7
Variables with automatic storage duration (3.7.2) are initialized each time their declaration-statement is
executed. Variables with automatic storage duration declared in the block are destroyed on exit from the
block (6.6).
Yandex
Объявления
30.08.2013, 12:17     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе?
Ответ Создать тему
Опции темы

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