¿Puedo escribir un constructor de copia simplemente pasando un puntero en lugar de la referencia de referencia? (¿Sería aceptable si me aseguro que yo no voy a cambiar cualquiera de los valores, aunque?)Copiar constructores - C++
así:
SampleClass::SampleClass(SampleClass* p)
{
//do the necessary copy functionality
}
en lugar de:
SampleClass::SampleClass(const SampleClass& copyObj)
{
//do the necessary copy
}
Gracias de antemano.
Gracias a todos. Entonces, si escribo un constructor que toma un puntero (y pensé que ese es mi constructor de copia), el compilador seguiría suministrando el constructor de copia predeterminado, en cuyo caso mi constructor (que yo creía era mi constructor de copia) no se llamaría y se llamaría al constructor de copia predeterminado. Lo tengo.
no se puede obtener una referencia nula sin invocar un comportamiento indefinido en dicho código. La prueba de NULL después del hecho no es útil, ya que el error está en el otro código. De hecho, el compilador puede optimizar la prueba 'if (& MyClassCopy == NULL)' porque nunca puede ocurrir en un programa correcto. –
Acepto que quitar la referencia de un puntero NULL es una operación no válida, y la prueba para NULL se realiza mejor antes de la operación de eliminación de referencias. Sin embargo, debido a que el NULL se puede asignar durante el tiempo de ejecución, la mayoría de los compiladores le permitirán crear una referencia NULL y el compilador no podría verificarla. o para optimizar una prueba de salida NULL,. Puedes probarlo con g ++ y la prueba funciona. – Rob
Después de un momento de reflexión, tiene razón, DEBE probar nulo antes de la operación de eliminación de referencia. La prueba después del hecho no está definida. – Rob