template <class T>
class Stack
{
public:
Stack(int = 10) ;
~Stack() { delete [] stackPtr ; } //<--- What does the "~" signify?
int push(const T&);
int pop(T&) ;
int isEmpty()const { return top == -1 ; }
int isFull() const { return top == size - 1 ; }
private:
int size ;
int top ;
T* stackPtr ;
} ;
Respuesta
Es el destructor, destruye la instancia, se libera memoria, etc, etc
He aquí una descripción de ibm.com:
Los destructores se utilizan generalmente para cancelar la asignación de memoria y hacer otra limpieza para un objeto de clase y sus miembros de clase cuando se destruye el objeto. Se solicita un destructor para un objeto de clase cuando ese objeto pasa fuera del alcance o se elimina explícitamente.
Ver https://www.ibm.com/support/knowledgecenter/SSB27U_5.4.0/com.ibm.zos.r9.cbclx01/cplr380.htm
Este es un destructor. Se invoca cuando el objeto se destruye (fuera del alcance de la vida o eliminado).
Para ser claros, tiene que usar ~ NameOfTheClass como para el constructor, otros nombres no son válidos.
"otros nombres son válidos"? –
Respuesta anterior ... Creo que quise decir que después de ~ podría ser cualquier nombre siempre que sea igual que el nombre de clase y el nombre del constructor. – Klaim
Es un destructor. Se garantiza que se llamará a la función cuando el objeto sale del alcance.
... si está asignado en la pila.Cuando se invoca 'eliminar' en el objeto si está asignado en el montón. – Jherico
@Jherico: en realidad es cuando se usa la palabra clave "eliminar". Recuerde que la palabra clave "nuevo" invoca "operador nuevo" y luego llama al constructor sobre la dirección devuelta para que sea perfectamente posible la "nueva" memoria en la pila. :) La palabra clave "eliminar" llama al destructor y luego invoca "borrar operador". – Troubadour
@Jherico o vive en el ámbito del espacio de nombres o es un miembro de la clase estática o una variable estática local de la función: la duración del almacenamiento estático. En otras palabras: todos los elementos con almacenamiento automático se destruirán automáticamente cuando corresponda. Tenga cuidado con [Static Initialization Order Fiasco] (http://stackoverflow.com/a/1005709/85371) – sehe
Ese sería el destructor (liberando cualquier memoria dinámica)
Como otros han señalado, en la instancia que está planteando es el destructor para class Stack
.
Pero tomar su pregunta tal y como aparece en el título:
en C++ lo que hace un tilde “~” antes de un nombre de función significa?
hay otra situación. En cualquier contexto excepto inmediatamente antes del nombre de una clase (que es el contexto del destructor), ~
es el operador de complemento de uno (o bit a bit). Para estar seguro de que no viene muy a menudo, pero se puede imaginar un caso como
if (~getMask()) { ...
que parece similar, pero tiene un significado muy diferente.
- 1. ¿Qué significa la tilde antes del nombre de una función en C#?
- 2. ¿Qué significa la tilde en una expresión?
- 3. ¿Qué significa & antes del nombre de la función?
- 4. ¿Qué significa esta tilde?
- 5. phpMyAdmin - ¿Qué significa una tilde (~) en la columna de filas?
- 6. ¿Qué significa la tilde (~) en macros?
- 7. ¿Cuál es la función de un asterisco antes del nombre de una función?
- 8. En C++, ¿qué significa y significa después del tipo de devolución de una función?
- 9. ¿Qué significa '@' char antes del nombre del parámetro en la declaración del método?
- 10. ¿Qué significa "..." en una declaración de función C?
- 11. ¿Qué significa que una función de C++ esté en línea?
- 12. ¿Qué significa una declaración "CALLBACK" en C?
- 13. ¿Qué significa `* &` en una declaración de función?
- 14. ¿Qué significa: en rieles antes de un nombre de variable?
- 15. "newing" una función en JavaScript, ¿qué significa?
- 16. ¿Qué significan * y ** antes de un nombre de variable en una firma de función?
- 17. ¿Qué significa :: :: en C++?
- 18. ¿Qué significa el símbolo @ antes de un nombre de variable en C#?
- 19. ¿Qué significa "C" en una ruta SVG?
- 20. ¿Qué significa "&" en C++?
- 21. ¿Una función virtual anula una función no virtual del mismo nombre en una clase base?
- 22. Significado del símbolo "~" (tilde) en C++?
- 23. inicializador esperado antes del nombre de la función
- 24. ¿Qué significa const después de una firma de función/método?
- 25. ¿Qué significa '??' significa en C#?
- 26. '&' antes del nombre del parámetro
- 27. ¿Por qué es el tipo de devolución antes del nombre de la función?
- 28. ¿Qué significa esto "(function() {});", una función entre paréntesis, en javascript?
- 29. ¿Qué significa (interactivo) en una función Emacs Lisp?
- 30. En PHP, ¿qué significa que una función sea binaria segura?
~ es el operador de negación a nivel de bit. Cuando se aplica a una definición de función, significa que la función hará * lo opuesto * de lo que dice que hará, por ejemplo, '~ push()' realmente saltará la pila, y '~ writeSeriousComment()' en realidad producirá comentarios como este. –
Para el beneficio del tipo de persona que parece publicar la mayoría de las preguntas de C++ en este sitio, no intente leer el comentario de j_random_hacker. – Alan
en beneficio de las personas que tienen sentido del humor (y algunos conocimientos básicos de programación) INTENTE leer el comentario de j_random_hacker. –