2016-02-11 13 views
7

Przeczytałem, że delete[] może zwolnić tablicę obiektów. Jednak w żadnym ze źródeł nie znalazłem wzmianki o tym, czy jest to błąd, czy nieokreślony, aby podać argument taki jak delete[3].Czy mogę podać argument, aby usunąć [] jak usunąć [3]?

Mam następujące zapytania.

  1. są określone w standardzie C++ czy mogę/nie suplly parametrem do delete[] jako delete[3]?
  2. Jeśli tak, jaki jest efekt?
  3. Czy jest również określony w C++, czy mogę/nie mogę używać delete dla tablicy przydzielonej od new[]?
+3

Przepraszamy za to pytanie, ale dlaczego chcesz podać argument do usunięcia? –

+2

Nie należy mylić tego z 'delete tablica [3]', które usuwa to, co 'array [3]' wskazuje (więc jeśli masz tablicę wskaźników) i nie usuwa 'tablica' lub jakiejś jego części. Usunięcie subarray nie jest możliwe, jeśli chcesz to zrobić. – leemes

+0

Aby napisać funkcję "void move_from_array (int * target, int * source) { * target = * source; delete [1] source ++;/* lub po prostu usuń źródło ++ */ target ++; } ' – pasha

Odpowiedz

11

(1) Tak, określa, że ​​nie można.

(3) Określa, że ​​wynik jest niezdefiniowany, więc nie.

4

delete[] jest operatorem.

delete[x] nie jest prawidłową składnią C++, więc kod nie zostanie skompilowany.

+0

Więc to, co mówisz, to "delete []" jest jak nazwa funkcji "functionxyz", a co próbuję zrobić to wywołanie go przez "function123"? – pasha

0

Tak, można przekazać dowolną argumentację operatorem delete [x], ale nie ma ona znaczenia. Jeśli wspomni o jakimkolwiek numerze destructor w class, wówczas wywoła on destructor przez nieskończony czas. Poniżej przykład

#include <iostream> 
using namespace std; 
class A 
{ 
public: 
A() { 
cout<<"\n Calling A constructor "; 
} 
/*~A(){ 
cout<<"\n Calling A Destructor "; 
    }*/ 
}; 
int main() 
{ 
A *a1= new A(); 

delete [3] a1; 

return 0; 
} 

Powyższa program (test z VC++) kompilować i zakończą się pomyślnie, jeśli odkomentowane że destructor część następnie skompilować pomyślnie ale destrutor wezwie nieskończony czas, co jest niezdefiniowane zachowanie programu.