crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> оператор delete
Гость_Quest_*
сообщение 5.8.2015, 0:53
Сообщение #1





Гости








    


Здравствуйте уважаемые программисты. У меня есть два вопроса про оператор delete.
1.) Если мы удалим указатель, который ссылается на какой-то объект, то удалиться только этот указатель ? Или объект, на который ссылается указатель, тоже удалится??

2.) Почему в этом случае элемент вектора не удаляется ? Остается его адрес, и более того, ему присваивается какое-то значение ?
int main()
{

    int *x=new int(15);
    int *y=new int(11);
    int *z=new int(7);

    vector<int*> a;
    
    a.push_back(x);
    a.push_back(y);
    a.push_back(z);
    
    int *h=a.at(1);
    delete h;
    
    for(int i(0);i<a.size();i++)
    {
        cout<<a.at(i)<<endl;   // должно быть по-идеи два элемента, а их три.
    }    

    _getch();
    return 0;
}


Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Гость_Quest_*
сообщение 5.8.2015, 15:23
Сообщение #2





Гости








    


Спасибо большое за ответы, особенно Iron Bug. Я так и думал, что удаляя указатель ( delete h; ), удаляется только объект на который он ссылается, а адрес остается, хотя он уже пустой.

А как тогда можно безопасно удалить контейнер объектов с выделенной динамически памятью ? К примеру объекты string или QPushButton (Qt). Ведь метод vector::erase() или vector::clear() просто очищают контейнер ? А освобождение памяти как тогда ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 1.5.2024, 0:28