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

Удаление указателей из вектора - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
xam max
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 199
20.07.2012, 23:39     Удаление указателей из вектора #1
Что то голова совсем не варит под вечер, подскажите, вот есть у меня вектор хранящий указатели на объекты, ежли я вызову erase насколько понимаю произойдет утечка памяти, а если буду поочередно применять delete[i] то никакого эффекта ж не будет?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2012, 23:39     Удаление указателей из вектора
Посмотрите здесь:

создание массива указателей на вектора C++
C++ удаление указателей
C++ Создать копию вектора указателей
Удаление массива указателей C++
удаление списка указателей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rudeeeboy
14 / 14 / 1
Регистрация: 08.11.2010
Сообщений: 172
21.07.2012, 00:05     Удаление указателей из вектора #2
а если обнулить?
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
21.07.2012, 00:45     Удаление указателей из вектора #3
Цитата Сообщение от xam max Посмотреть сообщение
ежли я вызову erase насколько понимаю произойдет утечка памяти
Да.
Цитата Сообщение от xam max Посмотреть сообщение
а если буду поочередно применять delete[i] то никакого эффекта ж не будет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
#include <vector>
#include <cstddef>
 
class some_class
{
    private:
        int n_;
    
    public:        
        some_class(int n)
            : n_(n)
        {
            std::cout << "some_class() #" << n_ << std::endl;
        }
        
        ~some_class()
        {
            std::cout << "~some_class() #" << n_ << std::endl;
        }
};
 
int main()
{
    std::vector<some_class*> v; 
    v.reserve(10);
    
    for(size_t i = 1; i <= 10; ++i)
        v.push_back(new some_class(i));
        
    // освобождаем выделенную под объекты память
    for(size_t i = 0; i < v.size(); ++i)
        delete v[i];    
}
Цитата Сообщение от rudeeeboy Посмотреть сообщение
а если обнулить?
...то будет утечка.
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,898
Завершенные тесты: 1
21.07.2012, 00:52     Удаление указателей из вектора #4
А если использовать unique_ptr вместо обычных указателей, то можно и обнулять, и erase делать смело...
xam max
3 / 3 / 0
Регистрация: 27.09.2009
Сообщений: 199
21.07.2012, 12:52  [ТС]     Удаление указателей из вектора #5
Цитата Сообщение от Nick Alte Посмотреть сообщение
А если использовать unique_ptr вместо обычных указателей, то можно и обнулять, и erase делать смело...
Это стандартное?

Добавлено через 7 минут
А вот еще вопрос, если я храню вектор с указателями в некотором классе Х, а объекты этого класса в свою очередь храню в векторе из другого класса Y, что произойдет, если я очищу этот вектор из класса Y? В деструкторе для класса X прописано удаление указателей из вектора X перед его очисткой.
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
21.07.2012, 12:57     Удаление указателей из вектора #6
Цитата Сообщение от xam max Посмотреть сообщение
Это стандартное?
Да, но только начиная с С++11, для компиляторов поддерживающих предыдущий стандарт можно использовать auto_ptr
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2012, 13:03     Удаление указателей из вектора
Еще ссылки по теме:

Запись вектора строк в массив указателей на тип char C++
C++ Сохранение в файл вектора указателей
C++ Удаление указателей на C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6906 / 5146 / 253
Регистрация: 10.12.2010
Сообщений: 22,639
Записей в блоге: 17
21.07.2012, 13:03     Удаление указателей из вектора #7
можно использовать auto_ptr
Нельзя не тот случай!

Нужно читать что что больше подходит из набора умных указателей boost::shared_ptr
Yandex
Объявления
21.07.2012, 13:03     Удаление указателей из вектора
Ответ Создать тему
Опции темы

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