45
голосов
6ответов
11277 просмотров

Is delete[] equal to delete?

IP_ADAPTER_INFO *ptr=new IP_ADAPTER_INFO[100]; if I free using delete ptr; will it lead to memory leak, if not then why ? This is disassembly code generated by VS2005 ; delete ptr; 0041351D mov eax,dword ptr [ptr] 00413520 mov dword ptr [ebp-0ECh],eax 00413526 mov ...

8
голосов
5ответов
5170 просмотров

Как удаление работает с постоянством указателя?

Я читал этот вопрос Удаление константного указателя и хотел узнать больше о поведении delete . Теперь, как я понимаю: delete expression работает в два этапа: вызвать деструктор затем освобождает память (часто с вызовом free()), вызывая оператор delete. operator delete принимает vo...

87
голосов
5ответов
24424 просмотров

Удаление указателя на const (T const *)

У меня основной вопрос относительно константных указателей. Мне не разрешено вызывать какие-либо неконстантные функции-члены с помощью константного указателя. Однако мне разрешено делать это с константным указателем: delete p; Это вызовет деструктор класса, который по сути является неконс...

127
голосов
12ответов
50415 просмотров

Почему не удалить указатель на NULL?

Меня всегда интересовало, почему автоматическая установка указателя на NULL после delete не является частью стандарта. Если об этом позаботиться, то многих сбоев из-за неправильного указателя не произойдет. Но, сказав это, я могу придумать пару причин, по которым стандарт ограничил бы это: ...

136
голосов
16ответов
128828 просмотров

Как delete [] узнает, что это массив?

Хорошо, я думаю, мы все согласны с тем, что то, что происходит со следующим кодом, не определено, в зависимости от того, что передано, void deleteForMe(int* pointer) { delete[] pointer; } Указатель может быть самым разным, поэтому выполнение безусловного delete[] на нем не определено...

165
голосов
11ответов
278089 просмотров

Вызывает ли удаление указателя на подкласс деструктор базового класса?

У меня есть class A, который использует выделение памяти кучи для одного из своих полей. Класс A создается и сохраняется как поле указателя в другом классе (class B. Когда я закончил работу с объектом класса B, я вызываю delete, который, как я предполагаю, вызывает деструктор ... Но вызывает л...

51
голосов
10ответов
32924 просмотров

Есть ли причина проверять указатель NULL перед удалением?

Я часто вижу проверку устаревшего кода на NULL перед удалением указателя, аналогично, if (NULL != pSomeObject) { delete pSomeObject; pSomeObject = NULL; } Есть ли причина проверять указатель NULL перед его удалением? По какой причине впоследствии был установлен указатель на NULL?

27
голосов
6ответов
74834 просмотров

перегрузка нового / удаления

Я делаю в своей программе небольшой поиск утечек памяти, но мой способ перегрузки new и delete (а также new [] и delete []) похоже, ничего не делает. void* operator new (unsigned int size, const char* filename, int line) { void* ptr = new void[size]; memleakfinder.AddTrack(ptr,size,fi...

1345
голосов
27ответов
1416771 просмотров

Удаление элементов массива в JavaScript - delete vs splice

В чем разница между использованием оператора delete в элементе массива, в отличие от использования метода Array.splice а>? Например: myArray = ['a', 'b', 'c', 'd']; delete myArray[1]; // or myArray.splice (1, 1); Зачем вообще нужен метод сращивания, если я могу удалять элементы...

64
голосов
11ответов
50137 просмотров

Вызов удаления переменной, выделенной в стеке

Игнорируя стиль программирования и дизайн, "безопасно" ли вызывать delete для переменной, размещенной в стеке? Например: int nAmount; delete &nAmount; или class sample { public: sample(); ~sample() { delete &nAmount;} int nAmount; }