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

Удаление элементов вектора - C++

Восстановить пароль Регистрация
 
vdvoid
3 / 3 / 0
Регистрация: 26.02.2011
Сообщений: 99
24.03.2013, 21:49     Удаление элементов вектора #1
как вызвать деструктор? почему не удаляется объект
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class a {
public:
    a() {
        std::cout << "c";
    }
    ~a() {
        std::cout << "d";
    };
};
int main() {
std::vector<a*> b;
b.push_back(new a);
b.erase(b.begin());
return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
24.03.2013, 21:58     Удаление элементов вектора #2
C++
1
2
3
4
5
6
std::vector<a*> b;
b.push_back(new a);
 
std::vector<a*>::iterator first = b.begin() ;
delete *first;  // Удаляем  сам объект класса
b.erase(first);//  Удаляем указатель на объект из вектора
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
24.03.2013, 21:58     Удаление элементов вектора #3
При удалении указателя исходный объект остаётся, естественно, нетронутым - это же обычный указатель. В данном случае необходимо вызвать delete b.front(); перед вызовом erase. Если есть поддержка C++11, то надо пользоваться владеющими указателями, чтобы не морочить себе голову с удалением вручную:
C++
1
std::vector<std::unique_ptr<a>> b;
.
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,591
Записей в блоге: 17
24.03.2013, 22:51     Удаление элементов вектора #4
Цитата Сообщение от Nick Alte Посмотреть сообщение
std::unique_ptr<a>
А разве unique_ptr копируемый ?
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.03.2013, 22:56     Удаление элементов вектора #5
Цитата Сообщение от Avazart Посмотреть сообщение
А разве unique_ptr копируемый ?
перемещаемый
Yandex
Объявления
24.03.2013, 22:56     Удаление элементов вектора
Ответ Создать тему
Опции темы

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