Operador delete (C++)
Desaloca um bloco de memória.
Sintaxe
[
::
]delete
cast-expression
[::
]delete []
cast-expression
Comentários
O argumento cast-expression deve ser um ponteiro para um bloco de memória alocado anteriormente para um objeto criado com o new operator. O operador delete
tem um resultado do tipo void
e, portanto, não retorna um valor. Por exemplo:
CDialog* MyDialog = new CDialog;
// use MyDialog
delete MyDialog;
Usar delete
em um ponteiro para um objeto não alocado com new
traz resultados imprevisíveis. No entanto, você pode usar delete
em um ponteiro com o valor 0. Essa provisão significa que, quando new
retorna 0 em falha, a exclusão do resultado de uma falha na operação new
é inofensiva. Para obter mais informações, consulte Os operadores new e delete.
Os operadores new
e delete
também podem ser usados para tipos internos, incluindo matrizes. Se pointer
referir-se a uma matriz, coloque parênteses vazios ([]
) antes de pointer
:
int* set = new int[100];
//use set[]
delete [] set;
Usar o operador delete
em um objeto desaloca sua memória. Um programa que remova a referência de um ponteiro após a exclusão do objeto pode ter resultados imprevisíveis ou falhar.
Quando delete
é usado para desalocar a memória para o objeto de classe C++, o destruidor do objeto é chamado antes que a memória do objeto seja desalocada (se o objeto tiver um destruidor).
Se o operando para o operador delete
for um l-value modificável, seu valor será indefinido após a exclusão do objeto.
Se a opção do compilador /sdl (Habilitar verificações de segurança adicionais) for especificada, o operando para o operador delete
será definido como um valor inválido após a exclusão do objeto.
Usando delete
Há duas variantes sintáticas para o operador delete: uma para objetos únicos e o outra para matrizes de objetos. O fragmento de código a seguir mostra como elas se diferem:
// expre_Using_delete.cpp
struct UDType
{
};
int main()
{
// Allocate a user-defined object, UDObject, and an object
// of type double on the free store using the
// new operator.
UDType *UDObject = new UDType;
double *dObject = new double;
// Delete the two objects.
delete UDObject;
delete dObject;
// Allocate an array of user-defined objects on the
// free store using the new operator.
UDType (*UDArr)[7] = new UDType[5][7];
// Use the array syntax to delete the array of objects.
delete [] UDArr;
}
Os dois casos a seguir produzem resultados indefinidos: usando a forma da matriz de delete (delete []
) em um objeto e usando a forma de não matriz de delete em uma matriz.
Exemplo
Para obter exemplos de uso de delete
, consulte operador new.
Como delete funciona
O operador delete invoca a função de exclusão do operador delete.
Para objetos que não forem do tipo de classe (class, struct ou union), o operador delete global será invocado. Em objetos do tipo de classe, o nome da função de desalocação é resolvido no escopo global se a expressão de exclusão começar com o operador unário de resolução de escopo (::
). Caso contrário, o operador Delete invoca o destruidor para um objeto antes de desalocar a memória (se o ponteiro não for nulo). O operador delete pode ser definido em uma base por classe; se não houver nenhuma definição para uma classe específica, a exclusão global do operador é chamada. Se a expressão de exclusão for usada para desalocar um objeto da classe cujo tipo estático tem um destruidor virtual, a função de desalocação é resolvida pelo destruidor virtual do tipo dinâmico do objeto.
Confira também
Expressões com operadores unários
Palavras-chave
Operadores new e delete