c++ - 如何在程序退出之前强制 boehm gc 全部收集

标签 c++ garbage-collection

我现在正在学习 boehm gc c++ 接口(interface)。不使用它,只是好奇。我按照官方的例子,写我的类什么可以被 GC,在析构函数中,有一个输出,所以我可以判断一个实例是否被 GC。 但只有当我使用循环创建多达一千个或更多的实例时,才会触发 gc 收集。如果代码像这样简单:

class test_gc : public gc
{
public:
    ~test_gc()
    {
        cout << "~test_gc()" << endl;
    }
};

int main()
{
    GC_INIT();
    ::new (GC) test_gc();
    GC_gcollect();
    return 0;
}

似乎从未调用过析构函数。没有输出“~test_gc()”。编译器的优化也被关闭。 我做了一些谷歌,除了官方示例几乎什么都找不到。

请帮助我如何在程序退出前强制执行 gc 收集,或者告诉我如果我使用错误如何正确使用它。 非常感谢。

最佳答案

I did some google, find nearly nothing but the official example.

这篇 Dr.Dobb 的文章 The Boehm Collector for C and C++有一些很好的例子。

it seems like the destructor is never called.

引用文章:

but if you want the destructor to be called, you must delete the object yourself.

关于c++ - 如何在程序退出之前强制 boehm gc 全部收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16804666/

相关文章:

c++ - boost::graph add_vertex 编译错误

docker - 更改 Solr 的 JVM 参数

java - HashMap复合键-停止每次调用时创建键对象的解决方案

c++ - 从点云库运行 hdl_simple_viewer.cpp 的可执行文件

c++ - 错误1错误C1083:无法打开包含文件:'exercises.h':没有此类文件或目录

java - Java 可以重用未处置的系统 GUI 资源吗?

Java G1GC 从不收集 Old Gen

java - 将数据传输到数据库问题,如何提高从java应用程序到数据库的数据传输速度?

python - 集成 Python 和 C++ MacOS PyModuleDef_HEAD_INIT 未声明

C++ if 语句数学评估错误