首页 > 解决方案 > 动态变量不起作用

问题描述

在这段代码中,当我动态初始化它时,为什么 first("invNummer") 总是 0?当我将其作为静态(两个)进行时,它可以工作。

class Computer {
private:
    int invNummer;
    char* osName;
    int state; // 0 – aus, 1 - an
public:
    Computer(int INV, char* OS, int st);

    void info() {
        cout << invNummer << " " << osName << " " << state << endl;
    }
};

Computer::Computer(int INV, char* OS, int st)
    : invNummer(INV)
    , osName(OS)
    , state(st)
{};

int main()
{
    Computer* one;
    one = new Computer(10, (char*)"Windows", 1);
    delete one;
    Computer two(9, (char*)"Linux", 0);

    one->info();
    two.info();

    return 0;
}

输出如下所示:

0 Windows 1
9 Linux 0

标签: c++classc++11dynamicconstructor

解决方案


正如@It's_comming_home 向您指出的那样,您的问题与动态创建对象无关one,而是与删除该对象有关:

delete one;

删除one对象时,指针悬空,即不再可用。如果您之后尝试取消引用它:

one->info();

你会得到未定义的行为,就像你的输出显示的那样。

one要解决此问题,只需在调用其info()方法后移动对象的删除:

one->info();
two.info();

delete one;

推荐阅读