我有一個下面的代碼。每次調用構造函數時,我都會增加一個計數器,並且每次調用析構函數時計數器都會減少。在實例化三個類對象之後,我嘗試打印出計數器值。然後,我試着在刪除其中一個對象後再次打印出計數器值。期望的值是4和3,但是我得到2和1.C++類構造函數/析構函數
我實際上已經嘗試在構造函數和析構函數中打印出一些內容來觀察它們被實際調用了多少次,但令人驚訝的是另外還調用了Destructor幾次到我稱之爲「刪除對象」的時候。是否因爲析構函數被自動調用?如果是這樣,有什麼辦法可以關閉該功能來測試我的代碼?
**代碼最初在類中有Add和Mult函數,但我在此省略,因爲這裏函數的細節看起來不相關。
#include <iostream>
using namespace std;
class Complex{
private:
double x, y;
static int count;
Complex Add(Complex como)
{
Complex t;
t.x=x+como.x;
t.y=y+como.y;
return t;
}
Complex Mul(Complex como)
{
Complex t;
t.x=(x*como.x)-(y*como.y);
t.y=(y*como.x)+(x*como.y);
return t;
}
public:
Complex(double a=0, double b=0) : x(a), y(b) {count++;}
~Complex() {count--;}
void Print() {cout << "(" << x << ", " << y << ")" << endl;}
static int GetCount() {return count;}
};
int Complex::count=0;
int main()
{
Complex com1(1.0, 2.0), com2(3.0, 4.0);
Complex com3;
com1.Print(); cout << endl;
com2.Print(); cout << endl;
com3 = com1.Add(com2); com3.Print(); cout << endl;
Complex *pcom4 = new Complex;
*pcom4 = com1.Mul(com2); pcom4->Print(); cout << endl;
cout << "#complex numbers = " << com1.GetCount() << endl;
delete pcom4;
cout << "#complex numbers = " << com1.GetCount() << endl;
return 0;
}
您不顯示Mul和Add的定義,請複製它們的參數? –
我只是假設'Add'和'Mul'的參數不是*引用(任何類似的)。 – WhozCraig
對不起,我剛添加了定義! – pandagrammer