En este insightful article, uno de los programadores de Qt intenta explicar los diferentes tipos de punteros inteligentes que Qt implementa. En un principio, se hace una distinción entre el intercambio de datos y compartir los propios punteros:punteros inteligentes en C++: compartir punteros vs. compartir datos
primer lugar, vamos a dejar una cosa clara: hay una diferencia entre compartir punteros y compartir datos. Cuando comparte punteros, el valor del puntero y su duración está protegido por la clase de puntero inteligente. En otras palabras , el puntero es el invariante. Sin embargo, el objeto al que apunta el puntero está completamente fuera de su control. No sabemos si el objeto es copiable o no, si es asignable o no.
Ahora, el intercambio de datos implica la clase de puntero inteligente sabiendo algo sobre los datos que se comparten. De hecho, el punto es que los datos están compartidos y no nos importa cómo. El hecho de que los punteros se estén utilizando para compartir los datos es irrelevante en este punto. Por ejemplo, a usted no le importa cómo las clases de la herramienta Qt son implícitamente compartidas, ¿verdad? Lo que le importa a usted es que se comparten (reduciendo así el consumo de memoria) y que funcionan como si no lo fueran.
Francamente, simplemente no explico esta explicación. Hubo una declaración de aclaración en los comentarios del artículo, pero no encontré la explicación del autor suficiente.
Si hace comprenda esto, por favor explique. ¿Cuál es esta distinción y cómo se ajustan a esta taxonomía otras clases de punteros compartidos (es decir, de impulso o los nuevos estándares de C++)?
Gracias de antemano
Esta cosa de Qt todavía me confunde :) –