C++ vs Java:无限循环创建对象只会崩溃C++

2022-09-02 22:49:12

这是我的一本书中的一个问题(没有附带答案),我已经考虑了几天了。答案是否只是C++代码最终会崩溃,因为它在每次迭代后都会创建一个垃圾存储单元?

请考虑以下 Java 和 C++ 代码片段,它们是基于 GUI 的应用程序的两个版本的一部分,它收集用户首选项并使用它们来组装命令及其参数。方法/函数 getUserCommandSpecification() 返回一个表示命令代码及其参数的字符串。返回的字符串用于构建所需的命令,然后执行该命令。

假设:

(i) 在 while 循环中创建 Command 对象后(在 Java 案例中由 cmd 引用,或在C++案例中由 cmd 指向),不再引用或使用对生成对象的引用/指针 cmd。

(ii) 应用程序还定义了一个类 Command 及其方法/函数 execute()。

一个。下面详细介绍的两个代码版本中的哪一个最终会崩溃。
(二)解释为什么一个程序版本崩溃而另一个程序版本没有崩溃。

Java 代码

...
while (true) {
   String commandSpecification = getUserCommandSpecification();
   Command cmd = new Command(commandSpecification);
   cmd.execute();
}
...

C++代码

...
while (true) {
   string commandSpecification = getUserCommandSpecification();
   Command* cmd = new Command(commandSpecification);
   cmd -> execute();
}
...

答案 1

是的,C++版本由于没有.当然,它可以很容易地以不同的方式编码,以避免这种情况:new Command(...)delete

...
while (true) {
   string commandSpecification = getUserCommandSpecification();
   Command cmd(commandSpecification);
   cmd.execute();
}
...

...所以我不确定这个例子是否像他们想象的那样有启发性。


答案 2

C++代码正在创建无数个永远不会被删除的对象。在C++中没有垃圾回收。必须调用 由 创建的所有实例。Commanddeletenew