Как удалить двойные (удалить) ошибки из мелко скопированного объекта по сравнению с исходным объектом.
Простой пример:
class INT
{
int *p; //dynamic.
//define here fancy constructors etc.
set(int i){ p=new int; p=i;}
~INT();
}
INT::~INT()
{
if(p) delete p;
}
void somefunction(INT a)
{
//done some stuff ,e.g. call some display function
}
//note here, that a destructor will be called, and a.p will vanish.
int main(void)
{
INT a; a.set(2);
somefunction(a);//shallow copy
}
//CRASH BOOM BOOM!
Я хотел бы универсальное решение, потому что передача объектовтривиальная вещь, и такая же наивная, как эта, приводящая к ужасной / ужасной ошибке, просто «потрясающая».
Я подозреваю, что есть много способов обойти это (некоторые из которых даже я могу придумать), ноМне было любопытно, есть ли какой-нибудь общий (применимый почти везде) способ решения этой проблемы?