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

Статический и динамический экземпляры класса - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
Frakir
 Аватар для Frakir
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 8
25.02.2013, 14:25     Статический и динамический экземпляры класса #1
В чем разница между статическим и динамическим экземплярами класса?
Мои познания здесь скромны:
1) Разная инициализация.
У меня есть класс Test.
Статический экземпляр создается так:
C++
1
Test stat;
При этом получаем экземпляр класса, который будет находиться в стеке, и для которого, по достижению конца блока кода, будет автоматически вызван деструктор.
Динамический класс создается так:
C++
1
Test dynam = new Test;
Экземпляр помещается в кучу, а мы далее работаем с указателем на экземпляр. Кроме того, требуется ручное удаление экземпляра.
2) Разный синтаксис для вызова методов и членов класса.
Статический экземпляр:
C++
1
stat.MyMethod();
Динамический экземпляр:
C++
1
dynam->MyMethod();
Из текущей картины складывается ощущение, что с динамическими экземплярами одни проблемы: работа через указатели, высокий риск утечки памяти и, возможно, потеря в скорости из-за размещения в куче.
Так зачем же было придумано 2 способа создания экземпляров класса? Что я упускаю из виду?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NIch
 Аватар для NIch
399 / 310 / 27
Регистрация: 17.03.2010
Сообщений: 1,120
25.02.2013, 18:01     Статический и динамический экземпляры класса #21
Ничего не мешает.
У тебя есть глобальный огромный объект.
Если он статический и сразу объявлен, то и память будет выделена.
А объявление указателя на него выделит лишь 4 байта. А сам объект к примеру в зависимости от условий можно и не создавать.
ИМХО

Не по теме:

Я вот только не пойму, ты хочешь мне рассказать о преимуществах, недостатках и особенностях использования динамических и статических объектов или топик стартеру.
По моему, это он писал о том зачем использовать (*) когда можно (&).

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.02.2013, 18:08     Статический и динамический экземпляры класса #22
Цитата Сообщение от Frakir Посмотреть сообщение
Но зачем делать так, если можно и статический экземпляр создать?
Я до сих пор не вижу смысла в динамическом экземпляре
смысл в том чотбы управлять временем жизни объекта
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.02.2013, 18:09     Статический и динамический экземпляры класса #23
Цитата Сообщение от NIch Посмотреть сообщение
Не по теме:
Я вот только не пойму, ты хочешь мне рассказать о преимуществах, недостатках и особенностях использования динамических и статических объектов или топик стартеру.
По моему, это он писал о том зачем использовать (*) когда можно (&).
Пытаюсь разобраться в твоих формулировках.
Frakir
 Аватар для Frakir
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 8
25.02.2013, 18:23  [ТС]     Статический и динамический экземпляры класса #24
Цитата Сообщение от Jupiter Посмотреть сообщение
смысл в том чотбы управлять временем жизни объекта
В таком случае можно просто вызвать деструктор:
C++
1
stat.~Test();
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
25.02.2013, 18:38     Статический и динамический экземпляры класса #25
Цитата Сообщение от Frakir Посмотреть сообщение
В таком случае можно просто вызвать деструктор:
нет, нельзя.
когда статический(правильно говорить - автоматический) объект выйдет из области видимости - будет вызван его деструктор 2-й раз(1-й раз вызвали вы сами) - а это неопределенное поведение.

PS вызывать деструктор руками можно только в одном случае, когда используется placement new
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.02.2013, 18:44     Статический и динамический экземпляры класса #26
Цитата Сообщение от Jupiter Посмотреть сообщение
вызывать деструктор руками можно только в одном случае, когда используется placement new
Или когда заморачиваешься с аллокаторами.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2013, 18:54     Статический и динамический экземпляры класса
Еще ссылки по теме:

Swap для элементов контейнера указателей на экземпляры абстрактного класса C++
Переделать статический массив в динамический C++
Переделать статический массив в динамический C++

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

Или воспользуйтесь поиском по форуму:
Frakir
 Аватар для Frakir
0 / 0 / 0
Регистрация: 25.02.2013
Сообщений: 8
25.02.2013, 18:54  [ТС]     Статический и динамический экземпляры класса #27
Цитата Сообщение от Jupiter Посмотреть сообщение
когда статический(правильно говорить - автоматический) объект выйдет из области видимости - будет вызван его деструктор 2-й раз(1-й раз вызвали вы сами) - а это неопределенное поведение.
Похоже, что управление временем жизни объекта - первое преимущество динамических экземпляров. Уже что-то
Yandex
Объявления
25.02.2013, 18:54     Статический и динамический экземпляры класса
Ответ Создать тему
Опции темы

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