|
|
|
| Вопрос про создание и удаление указателей
Вот продолжаю изучать с++
И дошел в книге до изучения указателей и ссылок.
Научился их использовать и указатели и ссылки.
Несколько примеров сделал, но не совсем понятно вот какой вопрос:
1. например я создал указатель так: long *pLong=new long;
2. я его удалил так delete pLong;
как его обнулить после этого? рекомендуется его обнулить.
понятно что если он в объекте то его обнулять не нужно и он удалится при удалении объекта.
Но вот когда он создается у меня например в функции.
какой из варантов тут будет правильный?
1. вариант pLong=0; - тут я как бы указываю на ноль
2. варант *pLong=0; - тут я обнуляю содержимое моего указателя , который я вроде как удалил
В книге написана рекомендация обнулить, а как обнулить не сказанно
Есть ли стандартные решения этого вопроса?
Вот я пробовал создать указатель , удалить его и
потом создать указатель с таким же именем но почемуто у меня так не получилось
и компилятор выдал ошибку.
И не совсем понятно тогда - будет ли утечка памяти всегда?
Или при удалении указателя память освободилась?
Книга называется Освой самостоятельно С++ за 21 автор Джесс Либерти
вот пример:
// Листинг 8.9
// пример возникновения бдуждающего указателя
/*
рекомендации по устранинию ошибки
применять оператор delete
Проверять значение возвращаемые оператором new
Убнулять указатель после удаления и не использовать его далее
*/
typedef unsigned short int USHORT;
#include <iostream>
using namespace std;
int main(){
USHORT *pInt =new USHORT;
*pInt =10;
cout<<"* pInt "<<*pInt<<endl;
delete pInt;
long *pLong=new long;
*pLong=9000;
cout<<"*pLong "<< *pLong<<"\n";
*pInt=20; // присвоение освобожденному указателю
//здесь *pLong незвестно как исменяется
cout<<"* pInt "<<*pInt<<endl;
cout<<"*pLong "<< *pLong<<"\n";
delete pLong ;
// чтобы консольное приложение не закрывалось сразу я добавил
int o;
cin>>o;
return 0;
}
|
| |
|
|