我刚开始学习C++,想知道是否有类似Java的GC。抱歉,这个问题太简单了。我找到的答案对我来说太专业了。一个简单的解释...
pgvzfuti1#
好的,这是我对这个问题的看法。你可以试试Hans Boehm conservative GC,它应该(嗯,著名的最后一句话)在C中工作得很好。当我们在C中通过new分配对象时,首先我们调用new运算符来获取原始内存,然后我们执行new表达式来进行对象初始化、调用构造函数等。请查看此处的讨论,但简单地说,Boehm GC将global::new运算符替换为对GC API的调用。全局::delete操作符也被替换为基本上是空的调用- GC将回收内存。删除表达式将是相同的,整个RAII机制应该可以正常工作。这是一个写得很好的软件,如果我需要GC用于C++项目,这是我会开始的地方。
ccgok5k52#
C++没有默认的GC。堆栈变量由RAII控制。unique_ptr和shared_ptr可以用来自动管理在堆上分配的对象。你也可以选择使用fully tracked pointer。
zbdgwd5y3#
只要不使用new,就应该自动进行垃圾收集。仅使用make_unique和make_shared分别管理unique_ptr和shared_ptr分配的内存。
new
make_unique
make_shared
unique_ptr
shared_ptr
3条答案
按热度按时间pgvzfuti1#
好的,这是我对这个问题的看法。你可以试试Hans Boehm conservative GC,它应该(嗯,著名的最后一句话)在C中工作得很好。
当我们在C中通过new分配对象时,首先我们调用new运算符来获取原始内存,然后我们执行new表达式来进行对象初始化、调用构造函数等。请查看此处的讨论,但简单地说,Boehm GC将global::new运算符替换为对GC API的调用。
全局::delete操作符也被替换为基本上是空的调用- GC将回收内存。删除表达式将是相同的,整个RAII机制应该可以正常工作。
这是一个写得很好的软件,如果我需要GC用于C++项目,这是我会开始的地方。
ccgok5k52#
C++没有默认的GC。堆栈变量由RAII控制。unique_ptr和shared_ptr可以用来自动管理在堆上分配的对象。你也可以选择使用fully tracked pointer。
zbdgwd5y3#
只要不使用
new
,就应该自动进行垃圾收集。仅使用
make_unique
和make_shared
分别管理unique_ptr
和shared_ptr
分配的内存。