我希望开发一个多线程的C++应用程序(其中大部分C++代码最终将由应用程序本身生成,这可以视为高级领域特定语言),在Linux/AMD64/Debian上使用GCC 4.6(并且可能是最新的C++11标准)。
我真的想为所有堆分配使用Boehm's conservative garbage collector,因为我想使用
使用C++(而不是C)的主要动机是C++标准库提供的所有算法和集合
Boehm的GC提供了一个
我应该重新定义
我应该使用带有显式分配器模板参数设置为
那么
还是您建议不要在由g++编译的应用程序中使用Boehm GC?
问候。
我真的想为所有堆分配使用Boehm's conservative garbage collector,因为我想使用
new(GC)
进行分配,并且不必担心delete
。我假设Boehm的GC足够好用。使用C++(而不是C)的主要动机是C++标准库提供的所有算法和集合
std::map
... std::vector
。Boehm的GC提供了一个
gc_allocator<T>
模板(在其文件gc/gc_allocator.h中)。我应该重新定义
operator ::new
作为Boehm的吗?我应该使用带有显式分配器模板参数设置为
gc_allocator
的所有集合模板吗?我不完全理解std::vector的第二个模板参数(分配器)的作用?它用于分配向量内部数据还是分配每个单独的元素?那么
std::string
呢?如何使它们的数据GC分配?我应该拥有自己的字符串,使用带有gc_allocator
的basic_string
模板吗?是否有一些方法可以获得用GC_malloc_atomic
而不是GC_malloc
分配的字符内部数组?还是您建议不要在由g++编译的应用程序中使用Boehm GC?
问候。
delete
,而且明白只有在非常特殊的情况下才应该使用new
,并且大部分情况下不需要使用指针的好的C++程序,那么如果您认为需要垃圾回收器,就可以使用它。另一方面,如果您不了解这些,您可能会发现以惯用的、现代化的C++方式实现用户友好的确定性内存管理是相当优秀的。 - Kerrek SBnew
,也绝不需要使用delete
。从你的文章中可以看出,我得到了一个清晰的印象,即你根本不知道如何编写C++代码,也不知道如何使用标准提供的结构,并且仅仅因为你习惯于GC,所以使用它作为范例。 - Puppy