我想跟蹤給定類創建了多少個對象。如果我在類中重載operator ++,析構函數被調用,但我不知道爲什麼。更具體地講:C++操作符重載,析構函數被調用
class num{
public:
virtual void setValue(int)=0;
static int db;
num(){}
~num(){}
};
int num::db = 0;
class int32: public num{
public:
// GET
int getValue();
// SET
void setValue(int f);
// constructor
int32()
{
cout << "Construction..."<<endl;
this->value = 0;num::db++;
}
// destructor
~int32()
{
cout << "destruction..."<<endl;
num::db--;
}
// operators
int32 operator++(int);
int32 operator++(void);
protected:
int value;
};
int32 int32::operator ++()
{
this->value++;
return *this;
}
int32 int32::operator ++(int)
{
this->value++;
return *this;
}
int main()
{
int32 i;
i.setValue(20);
cout << (i++).getValue()<<endl;
cout << (++i).getValue()<<endl;
cout << num::db;
cout << endl << "End of execution.";
return 1;
}
結果是: 建設... 破壞...... 破壞...... -1 結束execution.destruction的...
所以在++ i和i ++之後調用一個析構函數,但是爲什麼?
非常感謝!
我認爲這是因爲該類的一個實例在'i ++'和'++ i'之前被複制,因爲它可以在其他地方分配。因爲你沒有分配它,它會被破壞。儘管我真的在吸食稻草,所以我很樂意看到答案。 – slugonamission 2013-02-18 10:23:55
我建議你用cout實現複製構造函數,這應該指出你的理由。 – allen 2013-02-18 10:24:51
不過我不認爲你會得到'++ i'和'i ++'的權利...... – phoeagon 2013-02-18 10:25:01