0
class Foo
{
public:
    void bar();
};

void Foo::bar()
{
    static int n = 0;

    printf("%d\n", n++);
}

int main(int argc, char **argv)
{
    Foo *f = new Foo();
    f->bar();
    delete f;
    f = new Foo();
    f->bar();
    delete f;

    return 0;
}

クラスをもう一度'ing および'ing した後にnリセットしますか? それとも実質的に静的クラスメンバーですか (すべてのインスタンスで同じ参照)?0deletenewn

つまり、私は取得する必要があります

0
0

また

0
1

?

4

3 に答える 3

4

変数は関数内で静的であるため、変数がクラスの一部ではなく関数の一部であっても、メモリは静的であるため削除されないため、0、1 になります。

クラスのインスタンスを削除しても、関数はクラスの他のインスタンスで使用できるため、クラスのメモリに残ります。

于 2009-08-29T02:55:15.773 に答える
0

0 1

'n' は、事実上、異なるスコープを持つ静的クラス メンバーです。基本的に、他のコンテキスト (メンバー関数、グローバルなど) の関数の静的変数と同じです。

于 2009-08-29T02:57:02.680 に答える
0

「n」は関数 Foo::bar の静的変数です。作成または破棄する Foo インスタンスの数に関係なく、その関数のコピーは常に 1 つだけです。

于 2009-08-29T02:57:39.577 に答える