2012-04-06 11 views
8

¿Qué es exactamente el recuento de referencias? En particular, ¿qué es para C++? ¿Cuáles son los problemas que podemos enfrentar si no los manejamos? ¿Todos los idiomas requieren conteo de referencia?¿en qué consiste exactamente el recuento de referencias en C++ ?,

+2

Empieza a leer [aquí] (http://www.gotw.ca/gotw/043.htm). – Xeo

+1

"El recuento de referencias es una optimización común (también llamada" copia diferida "y" copia en escritura ")." - Herb Sutter. WTF? El recuento de referencias definitivamente * no * es lo mismo que "copia diferida" o "copia en escritura". Recuento de referencia (típicamente) para la gestión de memoria. No es una optimización per-se. –

+0

La [página de wikipedia sobre recuento de referencias] (http://en.wikipedia.org/wiki/Reference_counting) es una muy buena introducción al tema. –

Respuesta

0

La recolección de basura de recuento de referencias es una poderosa técnica para administrar la memoria que ayuda a evitar que los objetos se eliminen accidentalmente o más de una vez. La técnica no se limita al código C++ y, a pesar de su nombre, no está relacionada con el concepto de C++ de las variables de referencia. Por el contrario, el término significa que mantenemos un recuento de todas las "referencias propietarias" de un objeto y eliminamos el objeto cuando este recuento se convierte en cero.

1

El recuento de referencias es un enfoque simple pero no completo para la detección de basura.

Cuando el contador llega a cero, puede liberar ese objeto.

pero si ya no hay más objetos usados ​​que hacen referencia entre sí cíclico, que nunca serán liberados

considerar un referencias b, b referencias una, pero nada más referencia aob. La referencia cuenta con a y b seguirá siendo 1 (= en uso)

+2

Estrictamente hablando, no es "recolección de basura" cuando tiene recursos contados de referencia, ya que no hay basura. Basura es lo que obtienes * después * se han perdido todas las referencias. C++ generalmente no produce basura. (A diferencia de los programadores C++ *, quizás). –

+0

Correcto, es por eso que utilicé el término DETECCIÓN de basura –

+0

. Sin embargo, ¡no es "basura"! –

-2

Recuento de referencias: permite usar una metáfora.

Tienes un oído. Lo quieres de regreso en algún momento.

Tienes un grupo de personas que te apuntan a la oreja. Usted los cuenta tan pronto como señalan.

Cuando el número llega a cero, es solo tuyo y puedes hacerlo como desees.

I.e. sacarlo de la ecuación (liberarlo a la memoria).

BTW. Las cosas circulares son difíciles de detectar.

+3

"Tienes oído. Lo quieres de regreso en algún momento". Bueno, ya lo tengo, no hay necesidad de querer recuperarlo. También es mi oído cuando una docena de personas lo señalan. Metáfora defectuosa – Evert

7

¿Qué es exactamente el recuento de referencias? En particular, ¿qué es para C++?

En palabras simples, el recuento de referencias significa contar las referencias a un objeto. Por lo general, C++ emplea la técnica de RAII. Donde, la capacidad de gestionar la desasignación de un objeto tipo está vinculada dentro del objeto tipo. Significa que el usuario no tiene que administrar explícitamente la duración del objeto y su desasignación de manera explícita. La funcionalidad para hacer esta gestión está construida en el objeto mismo.

Esta funcionalidad significa que el objeto debe existir y seguir siendo válido hasta que haya interesados ​​que se refieren al objeto, y esto se logra mediante el recuento de referencias. Cada vez que el objeto es compartido (copiado) el recuento de referencias (normalmente un miembro dentro del tipo de clase) se incrementa y cada vez que se llama al destructor el conteo disminuye, cuando el conteo llega a 0, el objeto no es referido por nadie y marca el final de su vida y por lo tanto está destruido.

¿Cuáles son los problemas que podemos enfrentar si no los manejamos?

Significaría que no habría más RAII y una gestión de recursos manual interminable y con frecuencia defectuosa.
En breve pesadillas de programación.

¿Todos los idiomas requieren recuento de referencias?

idiomas no requieren recuento de referencias, pero empleando la técnica proporciona un uso muy fácil y menos esfuerzos para que los usuarios de la lengua, así que la mayoría de los idiomas prefieren utilizarlo para proporcionar estas ventajas a sus usuarios.

Cuestiones relacionadas