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

der*_*vel 3 c++ java garbage-collection

到目前为止,我一直在用Java编写程序.所以当我开始使用C++时,首先想到的是如何破坏/删除/完成我不再需要的对象.

使用Java我曾经将它们设置null为垃圾收集器正在处理它.但是,我不知道C++的价值.我发现这篇文章http://en.wikipedia.org/wiki/Comparison_of_Java_and_C%2B%2B解决了我的大部分问题.但仍有一些我不明白的事情.

1)在Java中有一种方法可以强制垃圾收集器在现场清理(这并不总是有用,因为它在运行之前等待一些垃圾堆叠).有没有办法用C++做到这一点?

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

3)(C++)我应该强迫垃圾收集器在现场清理(我很确定这不是正确的方式,但我要求确定)?

如果你能给出一个代码触发器的小代码示例,我会赞美它.

Luc*_*ore 6

1)如果您的对象处于自动存储中,您可以限制其范围:

{
   X x;
   //...
}  //x gets destructed here
Run Code Online (Sandbox Code Playgroud)

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

X* x = new X;
//...
delete x; //x gets destructed
Run Code Online (Sandbox Code Playgroud)

2)你不能(至少以干净的方式).您必须指示C++何时删除对象,即使该指令包含结束括号.(请参阅第一个代码段)

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

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