c++ - 动态变量不起作用
问题描述
在这段代码中,当我动态初始化它时,为什么 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
解决方案
正如@It's_comming_home 向您指出的那样,您的问题与动态创建对象无关one
,而是与删除该对象有关:
delete one;
删除one
对象时,指针悬空,即不再可用。如果您之后尝试取消引用它:
one->info();
你会得到未定义的行为,就像你的输出显示的那样。
one
要解决此问题,只需在调用其info()
方法后移动对象的删除:
one->info();
two.info();
delete one;
推荐阅读
- java - 使用 jcifs 列出所有文件和目录
- c++ - C++ 交叉包含——这正常吗?
- c# - Vector3.magnitude和vector3.normalized解释
- python-2.7 - python 2.7.12 的 Numpy 错误
- amazon-web-services - AWS - 如何以编程方式获取账单月度预测
- icalendar - 第一次降临的规则
- amazon-web-services - AWS:ELB 运行状况失败或不适用于所有实例
- ios - 'React/RCTAnimationType.h' 文件未找到
- r - 大型矩阵上每行的皮尔逊系数
- terraform - 将 Terraform 生命周期 ignore_changes 应用于工作区中的所有资源