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

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


ClassA classA;

// и:

ClassA *classA = new ClassA();


К одному впоследствии обращение будет через точку, ко второму через "->". Вторая переменная содержит - указатель на экземпляр класса, а первая, видимо, сам экземпляр класса? smile Но не пойму вот что - а в чём собственно профит использования одного и другого случая? В каких случаях используется первый вариант, а в каких второй?
Kommentare (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
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden