特定のクラスで作成されたオブジェクトの数を追跡しようとしています。クラスで演算子 ++ をオーバーロードすると、デストラクタが呼び出されますが、理由がわかりません。もう少し詳しく言うと:
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;
}
結果は次のとおりです: 構築... 21 破壊... 22 破壊... -1 実行の終了.破壊...
++i と i++ の後にデストラクタが呼び出されますが、なぜでしょうか?
どうもありがとう!