0
class A
{
    int id;
    static int count;
public:
    A()
    {
        count++;
        id = count;
        cout << "constructor called " << id << endl;
    }
    ~A()
    {
        //count -=2; /*Keypoint is here. */
                   /*Uncomment it later. But result doesn't change*/
        cout << "destructor called " << id << endl;
    }
};

int A::count = 0;

int main()
{
    A a[2];
    return 0;
}

出力は

constructor called 1
constructor called 2
destructor called 2
destructor called 1

問題は、コメントを外して//count -=2; も結果は同じであるということです。

つまり、コンストラクターが静的メンバーを1インクリメントする場合、デストラクタは静的メンバーも1だけ正確にデクリメントする必要があり、その動作を変更することはできません。

4

1 に答える 1

2

count最初のデストラクタが呼び出された後は、何もアクセスしません。デストラクタは、変更するcountかどうかに関係なく、コーディングしたとおりに実行します。countただし、何らかの方法でアクセスしない限り、効果は表示されません。

于 2012-09-10T02:38:19.017 に答える