В чём отличие создания экземпляра класса?

 
0
 
C++
ava
Proger10 | 24.03.2013, 19:22
Читаю различную документацию по C++, не могу понять одного. В чём разница между таким созданием экземпляров класса:


ClassA classA;

// и:

ClassA *classA = new ClassA();


К одному впоследствии обращение будет через точку, ко второму через "->". Вторая переменная содержит - указатель на экземпляр класса, а первая, видимо, сам экземпляр класса? smile Но не пойму вот что - а в чём собственно профит использования одного и другого случая? В каких случаях используется первый вариант, а в каких второй?
Ответы (9)
ava
bsa | 24.03.2013, 18:48 #
Proger10, первый вариант используется тогда, когда объект может жить ограниченное время (пока функция не завершится, например). А второй в остальных случаях, в т.ч. при динамическом создании объектов (например, на основании файла конфигурации).
ava
Proger10 | 24.03.2013, 19:40 #
Цитата (bsa @ 24.3.2013,  18:48)
Proger10, первый вариант используется тогда, когда объект может жить ограниченное время (пока функция не завершится, например).

А память, при этом, самостоятельно высвободится или это необходимо делать вручную, когда объект больше не нужен?
ava
bsa | 24.03.2013, 21:38 #
Proger10, в первом варианте да, во втором нет
ava
EgoBrain | 17.04.2013, 02:19 #
bsa, в первом случае объект создается в стеке??
ava
k0rvin | 17.04.2013, 05:32 #
Цитата (EgoBrain @ 17.4.2013,  02:19)
bsa, в первом случае объект создается в стеке??

Да.
ava
bsa | 17.04.2013, 10:15 #
если объект создается с помощью malloc/new или других методов выделения памяти, то он создается в куче.
если создается глобальный или статический объект, то он создается в области статических данных - не куча и не стек.
если нестатический объект создается внутри функции без использования malloc/new и пр., то он будет размещен в стеке.

Под словом "объект" понимается переменная любого типа.
ava
Proger10 | 18.04.2013, 06:12 #
А если объект создаётся этим методом: "ClassA obj", можно ли в данном случае вручную очищать память моментально, после того, как объект становится ненужным? Или в этом никакого резона нет?
ava
borisbn | 18.04.2013, 06:19 #
Proger10, не только "нет резона", но и нельзя, т.к. после твоего освобождения памяти сработает автоматическое и будет крах
ava
kolesnle | 21.04.2013, 17:04 #
Цитата (Proger10 @  18.4.2013,  06:12 findReferencedText)
А если объект создаётся этим методом: "ClassA obj", можно ли в данном случае вручную очищать память моментально, после того, как объект становится ненужным? Или в этом никакого резона нет? 

В данном случае компилятор тебе выдаст предупреждение, что не хорошо это. Остальное сказал более опытный кот borisbn
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить