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