根据here,VC ++ 2013支持Minimal GC。
你们可以给我一些例子来说明它的用法吗?
换句话说,使用VC ++ 2013,如何使用GC?
我想要的代码示例可能如下所示:
auto p = gcnew int;
有没有?
答案 0 :(得分:6)
你可能对C ++ 11中的Minimal GC感到失望:它不做垃圾收集! C ++ 11中的最小垃圾收集支持由两部分组成:
上面概述的API的相关功能在20.6.4 [util.dynamic.safety]中定义,要包含的标题是<memory>
。这些功能简要说明:
void std::declare_reachable(void* p)
声明如果p
是非空指针,p
是可到达的对象,即使垃圾收集器已确定它不是。该函数可以分配内存,因此抛出。template <typename T> T* std::undeclare_reachable(T* p)
声明如果p
是非空指针,则p
不再可访问。拨打undeclare_reachable(p)
的次数不得超过使用相同指针调用declare_reachable(p)
的次数。void std::declare_no_pointers(char* p, size_t n)
声明从n
开始的p
字节的范围不包含任何指针,即使垃圾收集器已经确定会有内部指针。void std::undeclare_no_pointers(char* p, size_t n)
撤消从n
开始p
个字节中没有指针的声明。std::pointer_safety std::get_pointer_safety() noexcept
返回。我认为所有这些函数基本上都可以实现什么都不做,并返回默认值或指定返回类型的参数。这些函数的指针是有一个可移植的系统来通知垃圾收集器有关指针的信息,可以考虑可达和不跟踪的内存区域。
将来可能会增加某种程度的垃圾收集,或者更可能是垃圾收集,但我不确定桌面上是否有具体的提案。如果它被添加的东西,它可能被称为垃圾收集,因为它实际上不会清理所有垃圾:垃圾收集只会回收无法访问的对象的内存,但不尝试毁灭物体!也就是说,系统会给出一个无限期生命对象的视图,尽管它可以重用它所在的内存。