размером size и хочу его удалить в функции deleteArray то в этой функции мне нужно принять ,в качестве переметра, масив array так deleteArray(int &*array,int size),если я его передам так deleteArray(int *array,int size),то удалю его копию и у меня будет утечка памяти.Это правильно или нет?Еесли нет,то скажите,пожалуйста,почему.
Нет, это неправильно. Можно передавать и так, и так.
Тут есть тонкий момент. В С++ (ну и С в общем тоже) в программе непосредственно не существует объекта "такая-то переменная, созданная динамически" (через new). В программе существуют только ссылки (в любом виде) на этот объект. И передавать в функции ты можешь только ссылки на этот объект (если передашь копию, это будет уже другой объект)
то есть такое то удалю его копию и у меня будет утечка памяти. просто вообще невозможно в программе на С++ (или С)
но это в случае heap памяти да?
в случае ДИНАМИЧЕСКИХ объектов. никакого хипа не существует.
А в случае не-хип-памяти, тебе не надо ничего "удалять!". Так что опять - вопрос глупый.
deleteArray(int &*array,int size) Занулять ли ссылку(и) на удалённый объект ? это большой вопрос... Но язык не требует.
вы имете в виду,что по этому адресу даже после удаления числится мусор и если мы по этому адресу обратимся случайно прога может сломаться?
это не так работает?
так что по этому поводу?
Если у тебя есть указатель на динамически созданный объект, который ты удалил, то после удаления в этом указателе будет хранится адрес несуществующего объекта. В этом ничего страшного нет, если ты не будешь обращаться по этому адресу. Иногда такой указатель зануляют (nullptr), чтобы видеть, что ссылка ни на что не ссылается, но это вовсе не обязательно. Иногда алгоритм работы с такими объектами требует зануления, как , например, при обработке списка. Но в целом это не обязательно, язык это не требует, за ошибку это считать нельзя.
Обсуждают сегодня