根据here,VC++ 2013 支持Minimal GC。
你们能给我一些例子来说明它的用法吗?
也就是说,有了VC++ 2013,如何使用GC?
我想要的代码示例可能如下所示:
auto p = gcnew int;
有吗?
根据here,VC++ 2013 支持Minimal GC。
你们能给我一些例子来说明它的用法吗?
也就是说,有了VC++ 2013,如何使用GC?
我想要的代码示例可能如下所示:
auto p = gcnew int;
有吗?
你可能对 C++11 中的 Minimal GC: It doesn't do garbage collection 感到失望!C++11 中的最小垃圾回收支持由两部分组成:
然而,没有任何标准可以真正利用这些设施。当然,仅仅因为没有标准,并不意味着不使用作为接口的 Promise。
上述 API 的相关函数在 20.6.4 [util.dynamic.safety] 中定义,要包含的标头是<memory>
. 简单来说,这些功能是:
void std::declare_reachable(void* p)
说明 ifp
是一个非空指针,它p
是一个可访问的对象,即使垃圾收集器已经确定它不是。该函数可能会分配内存并因此抛出。template <typename T> T* std::undeclare_reachable(T* p)
说明 if是一个不再可访问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
如果实现具有严格的指针安全性,则返回。我认为所有这些函数基本上都可以实现为什么都不做,并返回一个默认值或指定返回类型的参数。这些函数的指针是有一个可移植的系统来通知垃圾收集器关于指针考虑可达和内存区域不跟踪。
将来可能会添加某种程度的垃圾收集或更可能是垃圾收集,但我不确定是否有具体的建议。如果添加了一些东西,它可能是被称为垃圾收集的东西,因为它实际上并没有清理所有垃圾:垃圾收集只会回收无法访问对象的内存,但不会尝试破坏对象!也就是说,系统会给出一个无限生命对象的视图,尽管它可以重用它所在的内存。