【发布时间】:2018-12-28 03:31:33
【问题描述】:
在这段代码中,当我动态初始化它时,为什么 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
【问题讨论】:
-
请不要这样做
(char *)"Windows"。使用const char*或使用std::string/std::string_view -
请确保您的代码在语言翻译中仍然存在,C++ 不知道
eins是one。您的主要问题是您删除了one指向的对象,该对象使指针悬空,取消引用悬空指针会调用 ub。此外,您不应该转换字符串文字,它们是const,因为它们存在于只读内存中。 -
@NathanOliver 我认为这不会有什么不同,但没关系。但是动态变量的问题依然存在。
-
请了解动态分配。您无法通过反复试验来解决这些问题。
-
您发布的代码中没有进行静态分配。
标签: c++ class c++11 dynamic constructor