Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态局部类内成员函数在类重新分配中幸存?_C++_Class_Static_Local - Fatal编程技术网

C++ 静态局部类内成员函数在类重新分配中幸存?

C++ 静态局部类内成员函数在类重新分配中幸存?,c++,class,static,local,C++,Class,Static,Local,n在delete和new重新加载类后是否重置为0?或者n实际上是静态类成员(在所有实例中都是相同的引用) 换句话说,我应该 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();

n
delete
new
重新加载类后是否重置为
0
?或者
n
实际上是静态类成员(在所有实例中都是相同的引用)

换句话说,我应该

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;
}
0 0 或

0 1.

由于变量在函数中是静态的,它将是0,1,因为内存不是静态的,即使变量是函数的一部分而不是类的一部分


即使删除一个类的实例,函数仍然保留在该类的内存中,因为它们可以被该类的其他实例使用。

因为变量在函数中是静态的,所以它将是0,1,因为内存不是静态的,因为它是静态的,即使变量是函数的一部分而不是类的一部分

即使删除一个类的实例,这些函数仍然保留在该类的内存中,因为它们可以被该类的其他实例使用。

0 一,

“n”实际上是具有不同作用域的静态类成员。它本质上与任何其他上下文函数(成员函数、全局函数等)中的静态变量相同 一,


“n”实际上是具有不同作用域的静态类成员。它本质上与任何其他上下文(成员函数、全局函数等)的函数中的静态变量相同。

'n'是函数Foo::bar中的静态变量。无论您可能创建或销毁多少个Foo实例,该函数只有一个副本。

'n'是函数Foo::bar中的一个静态变量。该函数只有一个副本,不管您可能创建或销毁多少个Foo实例。

这是有道理的。因此,所有类实例的静态局部实际上是相同的,因为它们实际上都使用相同的函数实例。这很有意义。因此,所有类实例的静态局部实际上是相同的,因为它们实际上都使用相同的函数实例。 0 0 0 1