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

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

Восстановить пароль Регистрация
 
qazc
0 / 0 / 1
Регистрация: 01.11.2011
Сообщений: 26
29.08.2013, 18:23     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #1
Доброго времени суток! Подскажите, пожалуйста, есть ли разница в количестве задействованной памяти если объект класса создавать через указатель(как в данном случае) или обычым образом(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++
C++ Одномерный массив, статическое выделение памяти, ошибка в объявлении
Ошибка при объявлении структуры C++
указатель на указатель или присваивание объекта C++
Создание объекта через указатель на базовый абстрактный класс C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
29.08.2013, 18:27     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #2
Цитата Сообщение от qazc Посмотреть сообщение
Подскажите, пожалуйста, есть ли разница в количестве задействованной памяти если объект класса создавать через указатель(как в данном случае) или обычым образом(Car myCar; ) в данной программе?
Количество памяти задействуется одно и тоже, но в разных областях памяти: через указатель - в динамической памяти, обычнам обрзом - на стеке.
Цитата Сообщение от qazc Посмотреть сообщение
Или выигрыш с памятью был бы в случае, если бы на этом программа не завершалась, но данный объект уже был бы не нужен?
Да. На стеке объект будет храниться до окончания программы, если же вы создали объект динамически, то можете в любой момент освободить память под ним.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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
2182 / 1865 / 187
Регистрация: 03.07.2012
Сообщений: 6,630
Записей в блоге: 1
29.08.2013, 21:55     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #6
Выделение динамической памяти происходит порциями и минимальная порция может быть на порядок больше, чем требуемая, а стек действует экономней и быстрее (но у него запасов меньше).

Хотя для данного примера это чисто теоретический нюанс.
kvadro
11 / 9 / 1
Регистрация: 12.03.2012
Сообщений: 127
30.08.2013, 01:02     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе? #7
Kastaneda
Это описано стандартном? Просто я читал что некоторые компиляторы вытягивают объявление переменной из блока.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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++ Указатель и инициализация объекта класса
C++ Создание копии объекта используя объявление через указатель

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

Или воспользуйтесь поиском по форуму:
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 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     Есть ли выигрыш в памяти при объявлении объекта через указатель в данной программе?
Ответ Создать тему
Опции темы

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