1) ¿Cómo el puntero this
es diferente de otros punteros? Según tengo entendido, los punteros apuntan a la memoria en el montón. ¿Eso significa que los objetos siempre se construyen en el montón, dado que hay un puntero hacia ellos?
2) ¿Podemos robar el puntero this
en el constructor de movimiento o la asignación de movimiento?
3 respuestas
¿Cómo este puntero es diferente de otros punteros?
El puntero this
solo existe en el contexto de una función de miembro que no sea static
clase. También está implícito, su nombre es una palabra clave reservada y siempre es una expresión de prvalue. De lo contrario, es lo mismo que cualquier otro puntero.
Según tengo entendido, los punteros apuntan a la memoria en el montón.
Los punteros pueden apuntar a cualquier cosa en la memoria. No se limita al montón y tampoco lo son objetos.
¿Podemos robar este puntero en mover constructor o mover asignación?
this
es siempre una expresión prvalue. No es posible asignarle una nueva dirección más de lo que podría asignarle un nuevo valor a 5
. El hecho es que los objetos existen en un lugar en la memoria durante toda su vida. Su dirección nunca puede cambiar y sería ilógico intentar cambiar eso asignando una nueva dirección a this
. Al moverse de un objeto, se mueve el valor o estado que el objeto tiene en otro lugar, pero el objeto en sí mismo todavía existe en su dirección anterior.
¿Cómo este puntero es diferente de otros punteros?
this
no es diferente de otros punteros, excepto que no puede cambiar su valor y que solo existe dentro de las funciones miembro. Es una palabra clave reservada.
Según tengo entendido, los punteros apuntan a la memoria en el montón. ¿Eso significa que los objetos siempre se construyen en el montón, dado que hay un puntero hacia ellos?
No, los punteros (válidos o no válidos) pueden apuntar "a cualquier parte". No, las estructuras / clases se pueden asignar a cualquier lugar. En la tienda automática (pila), en la tienda gratuita (montón), en otro lugar si la plataforma lo admite.
¿Podemos robar este puntero en mover constructor o mover asignación?
No estoy exactamente seguro de lo que está preguntando, pero la respuesta es probablemente no.
1) ¿En qué se diferencia este puntero de otros punteros?
this
es una palabra clave. No puede y no necesita ser declarado. this
está implícitamente disponible en funciones miembro no estáticas. this
se refiere al argumento de instancia de la función miembro.
Por el contrario, las variables de puntero pueden y generalmente deben declararse. Un ejemplo de una declaración de puntero:
void* ptr = nullptr;
Según tengo entendido, los punteros apuntan a la memoria en el montón.
1
¿Eso significa que los objetos siempre se construyen en el montón
1
void foo() {
int i;
int* iptr = &i;
}
1 1
2) ¿Podemos robar este puntero en mover constructor o mover asignación?
Depende de lo que quieras decir con "robar". Pero probablemente no.
1
Preguntas relacionadas
Nuevas preguntas
c++
C ++ es un lenguaje de programación de propósito general. Originalmente fue diseñado como una extensión de C, y tiene una sintaxis similar, pero ahora es un lenguaje completamente diferente. Use esta etiqueta para preguntas sobre el código (que se compilará) con un compilador de C ++. Utilice una etiqueta específica de la versión para preguntas relacionadas con una revisión estándar específica [C ++ 11], [C ++ 14], [C ++ 17] o [C ++ 20] etc.