![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Guinness |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 21.6.2009 Где: Зеленоград Репутация: нет Всего: 10 |
Для тех кому интересна информация об умных указателях, нашёл статейки, может кому пригодится:
unique_ptr unique_ptr vs shared_ptr Это сообщение отредактировал(а) Guinness - 25.9.2013, 16:53 |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
тогда еще свою статью оставлю тут
|
|||
|
||||
NoviceF |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 313 Регистрация: 13.3.2012 Где: Ростов-на-Дону Репутация: нет Всего: 2 |
Никто не прокомментировал, но
Синтаксическая ошибка, так что пример вообще не должен компилиться. Но даже, если здесь использовать
Программа будет падать, т.к. это попытка удалить память, выделенную на стеке при помощи delete. Но даже если программа не упадёт, будет утечка памяти, т.к. элементы массива в коде не удаляются. |
||||
|
|||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Да в общем случае можно, но это будет неудобно (не так быстро или ещё варианты). Да и скажем, в одном из вариантов не обойтись без указателей, а в другом случае нужны ссылки. Вообще "std::vector" яляется не более чем оболочкой для массива с переменной, указывающей количество используемых элементов в массиве. Далее, С в помощь настойчивому программисту и подобные задачи уже писались до ООП. И решались не так уж сложно. Как сделать смещение в массиве с удалением элемента - это просто. Но это уже не ООП в чистом виде. malloc в зубы - и вот тебе уже capacity контейнера vector А чем вызвана причина необходимости именно такого подхода? Может, сначала стоит оценить реальную мотивировку? Это сообщение отредактировал(а) akizelokro - 26.9.2013, 19:32 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
Salatovec |
|
||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 9.1.2008 Репутация: нет Всего: -1 |
А как тогда должна выглядеть правильная очистка? Во всех примерах, подобного рода, память освобождали именно таким образом ![]() |
||||||
|
|||||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Salatovec, delete figures[1];
delete figures[] - синтаксически неверно, а delete []figures можно применять только после figures = new Figure*[4]; А у тебя автоматический массив указателей. Он уничтожается тоже автоматически. Но объекты, на которые ссылаются члены массива уничтожать надо вручную. |
|||
|
||||
Salatovec |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 213 Регистрация: 9.1.2008 Репутация: нет Всего: -1 |
bsa, правильно ли я понимаю, что нужно сделать так:
Так? |
|||
|
||||
vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 13 Всего: 56 |
так
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
Salatovec, да. Правильно.
Но всеже рекомендую использовать умные указатели ВЕЗДЕ. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |