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;
}


Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V  < 1 2  
Начать новую тему
Ответов (10 - 13)
Гость_Quest_*
сообщение 5.8.2015, 16:21
Сообщение #11





Гости








    


lanz, разумеется, указатели на целый тип я хранить не буду :) , тут просто как пример привожу. По поводу "лучше", я имел ввиду, что, может там алгоритм удаления какой быстрее или медленнее.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lanz
  опции профиля:
сообщение 5.8.2015, 16:35
Сообщение #12


Старейший участник
****

Группа: Участник
Сообщений: 690
Регистрация: 28.12.2012
Пользователь №: 3660

Спасибо сказали: 113 раз(а)




Репутация:   8  


Если это не целый тип, то интереснее подумать, кто будет "владеть" этими объектами. Тот и должен их удалять.
Если вектор владеет, то я бы посоветовал unique_ptr.

Цитата
может там алгоритм удаления какой быстрее или медленнее.

Профилируйте, так вам никто не скажет :lol:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Quest_*
сообщение 5.8.2015, 16:49
Сообщение #13





Гости








    


Цитата(lanz @ 5.8.2015, 16:35) *
Если вектор владеет, то я бы посоветовал unique_ptr.


Спасибо за совет.

И всем спасибо за ответы. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 5.8.2015, 17:33
Сообщение #14


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


По вектору лучше тоже перемещаться итератором:
for(vector<int*>::iterator i=a.begin();i!=a.end();i++)
    {
        delete *i;
    }



Цитата(lanz @ 5.8.2015, 16:17) *
Мне кажется одним C тут не отделаешься. Нужно понимать из чего состоит и как работает компьютер (хотя бы самый простой, например AVRка). Потом нужно понимать как разные языки доходят до "железа", как программы превращаются в исполняемые файлы и т.п.

AVRка всё же не компьютер. микроконтроллеры гораздо проще устроены. у современных компьютеров довольно сложные чипсеты, замороченные схемы прогрузки через UEFI и это начинающему вряд ли нужно понимать в деталях.
а вот цепочку превращения кода в бинарник понимать нужно в любом случае. ну и примерно о том, как код исполняется (тут тоже всё сильно зависит от архитектуры и там есть сильно разные реализации).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 14.5.2024, 21:04