gpt4 book ai didi

c++ - 从 C++ 中的析构函数中恢复对象?

转载 作者:IT老高 更新时间:2023-10-28 14:01:35 26 4
gpt4 key购买 nike

免责声明:我知道这是一个糟糕的设计,我只是出于好奇而提出这个问题,以便尝试更深入地了解析构函数在 C++ 中的工作原理。

在 C# 中,可以在类 的析构函数中编写:GC.KeepAlive(this)(参见下面的编辑),这意味着该对象将即使在析构函数调用完成后仍然存在于内存中。

C++ 的设计是否允许从析构函数中恢复对象,类似于上述 C# 算法?

编辑:正如下面的答案所指出的,GC.ReRegisterForFinalize() 与问题的关系比 GC.KeepAlive(this)

最佳答案

简短的回答是:不。 C++ 不像 Java 或 C# 那样使用垃圾收集。当一个对象被销毁时,它会立即被销毁。一去不复返了。加入了无形的合唱团。渴望峡湾等......

并且用不同的词多说几次这样就不会轻易地重新解释......

析构函数作为对象销毁的一部分被调用。对象销毁包括调用析构函数和释放用于对象本身的内存。这是一个单独的过程,而不是两个单独的过程。当析构函数运行时,对象仍然存在,供析构函数使用,但它存在于借用时间。已成定局的结论是,一旦析构函数返回,对象就会被汽化。一旦调用了析构函数,对象就会被销毁,并且不会改变它的命运。

理解这一点:调用析构函数的原因是:该对象最初是用“new”在堆上分配的,现在它正在被“delete”。 “删除”的意思是“删除”,而不是“可能删除”。所以对象被删除了。或者,如果对象是在堆栈上分配的,则执行线程退出了作用域,因此在作用域中声明的所有对象都将被销毁。从技术上讲,析构函数是由于对象被销毁而被调用的。因此,对象正在被销毁。结局。

话虽如此,C++ 允许您为您的类实现自定义分配器。如果您愿意,您可以编写自己的自定义内存分配和释放函数来实现您想要的任何功能。尽管这些从未用于堆栈分配的对象(即局部变量)。

关于c++ - 从 C++ 中的析构函数中恢复对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35457998/

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