#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/

10-11 01:09