gpt4 book ai didi

java - C++ 中的析构函数(与 Java 相比)

转载 作者:太空狗 更新时间:2023-10-29 19:40:50 26 4
gpt4 key购买 nike

到目前为止,我一直在用 Java 编写程序。因此,当我开始使用 C++ 时,我首先想到的是如何销毁/删除/终结我不再需要的对象。

对于 Java,我过去常常将它们设置为 null,这样垃圾收集器就会处理它。但是,我不知道 C++ 的值(value)。我找到了这篇文章 http://en.wikipedia.org/wiki/Comparison_of_Java_and_C%2B%2B这解决了我的大部分问题。但是还有一些事情我没有理解。

1) 在 Java 中有一种方法可以强制垃圾收集器当场清理(这并不总是有用,因为它会等待一些垃圾堆积起来再运行)。有没有办法用 C++ 做到这一点?

2) (C++) 同样与上述相反,我怎样才能使对象处于“标记为要删除”的状态并且程序决定何时清理它(如 Java)?

3) (C++) 我是否应该强制垃圾收集器当场清理(我很确定这不是正确的方法,但我只是为了确定而问)?

如果您能给出一个代码触发什么的小代码示例,我会很感激。

最佳答案

1) 如果你的对象在自动存储中,你可以限制它们的范围:

{
X x;
//...
} //x gets destructed here

如果在动态存储中,完成后删除它们:

X* x = new X;
//...
delete x; //x gets destructed

2) 你不能(至少以一种干净的方式)。你必须指示 C++ 何时删除你的对象,即使该指令由一个结束括号组成。 (见第一个代码片段)

3) C++ 中没有垃圾收集器。看到两个片段。您要么必须显式删除对象(如果在动态存储中),要么如果在自动存储中,它们将被自动删除(但不是由垃圾收集器删除)。

值得研究的是智能指针(那里有大量的实现),但这也不是垃圾收集器。它只是为您节省了管理内存的麻烦。但它与 Java 完全不同。

关于java - C++ 中的析构函数(与 Java 相比),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9265462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com