Hola nuevamente:
El siguiente código:
#include <iostream>
using namespace std;
struct s{
private:
double * d = nullptr;
public:
s() : d{new double}{}
~s(){ if (d != nullptr) delete d; }
void setd(const double _d){ *this->d = _d; }
double getd() const { return *this->d; }
};
s operator+(const s & _s0, const s & _s1){
s ns;
ns.setd(_s0.getd() + _s1.getd());
return ns;
}
int main(){
s s0;
s s1;
s s2;
s2 = s0 + s1;
return 0;
}
Aqui listo para ejecutar:
https://onlinegdb.com/rJNPQ68krAl ejecutar, obtengo el mensaje de error:
*** Error in `./a.out': double free or corruption (fasttop): 0x0000000000795c80 ***
Aborted (core dumped) Estoy seguro que el problema esta entre el puntero privado y el delete en el destructor, ya que si no uso puntero, compila bien.
Sin embargo, he puesto puntero porque quiero entender qué está pasando. Me da la impresión de que en la definición del operador+ como se crea el objeto
ns al terminar el ámbito, se está destruyendo y esta eliminando el puntero. Lo cual parece valido, pero no tendría por qué corromper la ejecución, se supone que estoy destruyendo un objeto de copia, no los operandos utilizados.