Código
struct datos { void *data; unsigned int length; datos(); void operator=(datos rDatos); ~datos(); } datos::datos() { data = NULL; length = 0; } void datos::operator=(datos rDatos) { if (rDatos.length > 0 && rDatos.data != NULL) { length = rDatos.length; data = new unsigned char[length]; if (data != NULL) { for (unsigned int a=0; a<length; a++) { ((unsigned char *)data)[a] = ((unsigned char *)rDatos.data)[a]; } } } } datos::~datos() { if (data != NULL) { delete[] (unsigned char *)data; } }
Si hago algo como lo siguiente, se me cierra el programa con un error.
Código
datos miVariable; // Despues de ponerle datos a la variable.... miFuncion(miVariable);
El caso es que he visto que el problema desaparece cuando el destructor de la estructura no elimina el buffer de datos. Y eso me va a llevar inevitablemente a llenar la memoria. O sino, me lleva a estar pendiente de liberar la memoria en cada programa que haga uso de mi pequeña libreria.
¿Porque ocurre esto? ¿Como puedo hacer correctamente el operador de copia y el destructor de la estructura para manejarlo como una variable mas? (O al menos como un string, por ejemplo)
Muchas gracias por adelantado.