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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
vdvoid
3 / 3 / 0
Регистрация: 26.02.2011
Сообщений: 99
#1

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

24.03.2013, 21:49. Просмотров 680. Ответов 4
Метки нет (Все метки)

как вызвать деструктор? почему не удаляется объект
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2013, 21:49     Удаление элементов вектора
Посмотрите здесь:

Удаление элементов вектора с использованием итератора в STL C++
Удаление элементов, входящих в заданный интервал, из вектора C++
Функция (удаление элементов вектора, равных переданному значению) C++
Массив и Удаление элементов вектора C++
Удаление элементов из вектора C++
Удаление всех элементов вектора C++
C++ Удаление элементов вектора со сдвигом
C++ Удаление элементов из вектора
Удаление из вектора повторяющихся элементов C++
C++ Удаление одинаковых элементов вектора
Удаление из вектора C++
C++ Удаление одинаковых элементов из вектора <string>

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,072
Записей в блоге: 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
Эксперт С++
1605 / 997 / 118
Регистрация: 27.09.2009
Сообщений: 1,923
Завершенные тесты: 1
24.03.2013, 21:58     Удаление элементов вектора #3
При удалении указателя исходный объект остаётся, естественно, нетронутым - это же обычный указатель. В данном случае необходимо вызвать delete b.front(); перед вызовом erase. Если есть поддержка C++11, то надо пользоваться владеющими указателями, чтобы не морочить себе голову с удалением вручную:
C++
1
std::vector<std::unique_ptr<a>> b;
.
Avazart
7066 / 5243 / 263
Регистрация: 10.12.2010
Сообщений: 23,072
Записей в блоге: 17
24.03.2013, 22:51     Удаление элементов вектора #4
Цитата Сообщение от Nick Alte Посмотреть сообщение
std::unique_ptr<a>
А разве unique_ptr копируемый ?
Jupiter
Каратель
Эксперт С++
6550 / 3970 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.03.2013, 22:56     Удаление элементов вектора #5
Цитата Сообщение от Avazart Посмотреть сообщение
А разве unique_ptr копируемый ?
перемещаемый
Yandex
Объявления
24.03.2013, 22:56     Удаление элементов вектора
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru