Статическая локальная функция в классе переживает перераспределение класса? - PullRequest
0 голосов
/ 29 августа 2009
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;
}

Сбрасывает ли n значение 0 после delete 'ing и new' снова в классе? Или n фактически является статическим членом класса (одинаковая ссылка во всех случаях)?

Другими словами, я должен получить

0
0

или

0
1

Ответы [ 3 ]

4 голосов
/ 29 августа 2009

Поскольку переменная является статической в ​​функции, она будет равна 0, 1, поскольку память не удаляется, поскольку она является статической, даже если переменная является частью функции, а не частью класса.

Даже при удалении экземпляра класса функции все еще остаются в памяти для класса, поскольку они могут использоваться другими экземплярами класса.

0 голосов
/ 29 августа 2009

'n' - статическая переменная в функции Foo :: bar. Существует только одна копия этой функции, независимо от того, сколько экземпляров Foo вы можете создать или уничтожить.

0 голосов
/ 29 августа 2009

0 1

'n' фактически является статическим членом класса с другой областью действия. По сути, это то же самое, что статическая переменная в функции любого другого контекста (функция-член, глобальная переменная и т. Д.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...