#include <iostream>
using namespace std;
class MyStaticClass{
public:
static int value;
MyStaticClass(){
value++;
}
~MyStaticClass(){}
};
int MyStaticClass::value;
void main(){
MyStaticClass::value = 0;
for (int i = 0; i<9; i++)
MyStaticClass *c = new MyStaticClass();
cout << MyStaticClass::value;
system("pause");
}
请解释一下为什么结果为9,用
MyStaticClass *c = new MyStaticClass()
替换MyStaticClass c()
时结果变为0?最后int MyStaticClass::value;
是什么意思,为什么当我删除该行时,编译器显示错误?感谢大家! 最佳答案
int MyStaticClass::value;
行告诉编译器为static
变量value
保留存储空间。如果您不这样做,则链接器将失败。
由于for
循环主体执行了9次,因此结果为9:您正在创建9个MyStaticClass
的新实例(这实际上不是static
类,它仅具有static
成员)。请注意,您应该对所有这些对象进行delete
编码,否则您的程序会泄漏内存。MyStaticClass c();
声明不带参数的函数c
的函数原型(prototype),并返回MyStaticClass
:它执行而不是创建对象。这被称为最烦人的解析。由于未创建任何对象,因此value
保持为0。如果您编写MyStaticClass c;
,那将是另一回事
关于c++ - 关于C++中的类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37918465/