如何從淺拷貝對象vs原始對象中刪除雙(刪除)錯誤。當使用對象的淺拷貝時出現雙倍空閒錯誤...如何修復?
一個簡單的例子:
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!
我想一個通用的解決方案,因爲傳遞對象是一件微不足道的小事,和幼稚,因爲這東西,結果變成一個可怕/了不起的錯誤僅僅是「真棒」。
我懷疑有解決這個許多方面(其中一些甚至是我能想到的),但我很好奇,如果有解決這個問題的任何通用(適用幾乎無處不在)的方式?
可能重複[什麼是複製和交換成語?](http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom) – 2011-03-11 02:31:55
可能重複的[什麼是三條規則?](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-reeree) – 2011-03-11 02:32:16
注意:我不想使用引用,或者使用引用泛型方案? – nikhilelite 2011-03-11 02:51:24