¿Cómo y cuándo hacer copias de profundidad en c ++
Las clases que asignan los recursos en su constructor normalmente deben incluir un constructor de copia para crear copias de estos recursos. La asignación de un nuevo bloque de memoria y copiar el contenido del original en este nuevo bloque se conoce como la creación de una copia profunda (a diferencia de la copia superficial por defecto). Utilice los siguientes pasos para determinar cómo y cuándo hacer copias profundas en C ++:
Haga siempre una copia en profundidad si el constructor asigna recursos.
De forma predeterminada, C ++ hace que las llamadas "superficiales" Miembro por miembro de copias de objetos al pasar a funciones o como consecuencia de una cesión. Debe reemplazar los operadores de copia de poca profundidad por defecto con su profundo equivalente copia para cualquier clase que asigna recursos en el constructor. El recurso más común que consigue asignada es la memoria heap que es devuelto por el nuevo operador.
Incluya siempre un destructor de una clase que asigna los recursos.
Si crea un constructor que asigna recursos, debe crear un destructor que los restaura. Sin excepciones.
Siempre declarar el destructor virtual.
Un error de principiante común es olvidarse de declarar su destructor virtual. El programa se ejecutará bien hasta que algún programador desprevenido viene y hereda de su clase. El programa todavía parece funcionar, sino porque el destructor de la clase base no podrá ser invocado correctamente, pérdidas de memoria de su programa como un colador hasta que finalmente se estrella. Este problema es difícil de encontrar.
Incluya siempre un constructor de copia para una clase que asigna los recursos.
El constructor de copia crea una copia correcta del objeto actual mediante la asignación de memoria fuera del montón y copiar el contenido del objeto de origen.
Siempre reemplazar el operador de asignación para una clase que asigna los recursos.
Los programadores deben ser disuadidos de los operadores predominantes, pero el operador de asignación es una excepción. Usted debe anular el operador de asignación para cualquier clase que asigna recursos en el constructor.
El operador de asignación debe hacer tres cosas:
Asegúrese de que el objeto de la izquierda y la derecha no son el mismo objeto. En otras palabras, asegúrese de que el programador de aplicaciones no escribió algo así como (a = a). Si lo son, no hacer nada.
Invoque el mismo código que el destructor en el objeto de la izquierda para volver a sus recursos.
Invoque el mismo código que un constructor de copia para hacer una copia en profundidad del objeto de la derecha en el objeto de la mano izquierda.
Si usted no puede hacer eso, entonces elimine el constructor de copia y el operador de asignación para que el programa no puede hacer copias de su objeto.
Si ni siquiera se puede hacer eso porque el compilador no admite la función de constructor de borrado C ++ 2011, cree un operador constructor de copia y asignación vacía y declararlas protegidas para mantener a otras clases de su uso.
Sobre el autor
Cómo utilizar miembros estáticos en c ++ En C ++, se puede declarar un miembro para ser compartido por todos los objetos de una clase declarando que miembro estático. Un miembro de datos estáticos en C ++ es uno que ha sido declarada con la estático clase de almacenamiento, como se…
Los c ++ estándar de categorías de la biblioteca La documentación de la biblioteca estándar utiliza un enfoque formal que vas a encontrar difícil de leer y aún más difícil de entender. La mejor manera de comenzar es romper la biblioteca estándar en pedazos más pequeños. Puede categorizar…
Instrucciones de asignación en java Un sentencia de asignación en Java utiliza el operador de asignación (=) Para asignar el resultado de una expresión a una variable. En su forma más simple, codificar así:variable = expresión:Por ejemplo:int a = (b * c) / 4-LA operador de…
¿Cómo crear una clase anónima en java Clases internas anónimas (por lo general sólo llamada clases anónimas) son probablemente la característica más extraña del lenguaje de programación Java. La primera vez que se ve una clase anónima, es casi seguro que piensa que alguien ha…
Cómo crear constructores en Java LA constructor es un bloque de código que se llama cuando se crea una instancia de un objeto en Java. En muchos sentidos, un constructor es similar a un método, pero existen algunas diferencias:Un constructor no tiene un tipo de retorno.El nombre…
Cómo utilizar un constructor en java LA constructor en Java es un bloque de código similar a un método que se llama cuando se crea una instancia de un objeto. Estas son las principales diferencias entre un constructor y un método:Un constructor no tiene un tipo de retorno.El nombre…
Cómo utilizar las declaraciones de clase en java En la programación Java, una clase se define por una declaración de la clase, que es un pedazo de código que sigue a esta forma básica:[público] NombreClase clase {clase de cuerpo}los público palabra clave indica que esta clase está…
Cómo utilizar inicializadores en java Un inicializador (a veces llamado un bloque inicializador) Es un bloque solitaria de código en Java que se coloca fuera de cualquier método, constructor u otro bloque de código. Inicializadores se ejecutan cada vez que se crea una instancia de…
Cómo utilizar el método clone para crear una copia superficial en java los clon método en Java crea manualmente una copia del objeto original y lo devuelve. En muchos casos, esta es la manera más fácil de crear un clon. Pero lo que si su clase tiene cien o más campos que deben ser duplicados?La posibilidad de…
Cómo utilizar este y súper palabras clave en sus subclases java los esta palabra clave proporciona una manera de referirse a la instancia del objeto actual en Java. A menudo se utiliza para distinguir entre una variable local o un parámetro y un campo de clase con el mismo nombre. Por ejemplo:public class Bola…
Tipos de referencia en java LA tipo de referencia es un tipo de datos que se basa en una clase en lugar de en uno de los tipos primitivos que se construyen en el lenguaje Java. La clase puede ser una clase que se proporciona como parte de la biblioteca de clases de la API de…
Cómo crear objetos en javascript javascript tiene un tipo de datos llamado objeto. javascript objetos encapsular datos y funcionalidad en componentes reutilizables. Es posible que la creación de un objeto es el siguiente paso lógico en su viaje de…