C++ 如何在VC++;2013?

C++ 如何在VC++;2013?,c++,visual-c++,memory-management,c++11,garbage-collection,C++,Visual C++,Memory Management,C++11,Garbage Collection,据介绍,VC++2013支持最小GC 你们能给我举几个例子来说明它的用法吗 换句话说,在VC++2013中,如何使用GC 我想要的代码示例可能如下所示: auto p = gcnew int; 有吗?您可能会对C++11中的最小GC感到失望:它不做垃圾收集!C++11中的最小垃圾收集支持由两部分组成: 有一个强制要求不要为每个人“隐藏”指针。当您有一个指针时,您不允许混淆这个指向系统的指针,例如,将它写入一个文件以便稍后读取,或者使用xor技巧创建一个双链接列表,同时只存储一个指针。本标准涉及

据介绍,VC++2013支持最小GC

你们能给我举几个例子来说明它的用法吗

换句话说,在VC++2013中,如何使用GC

我想要的代码示例可能如下所示:

auto p = gcnew int;

有吗?

您可能会对C++11中的最小GC感到失望:它不做垃圾收集!C++11中的最小垃圾收集支持由两部分组成:

  • 有一个强制要求不要为每个人“隐藏”指针。当您有一个指针时,您不允许混淆这个指向系统的指针,例如,将它写入一个文件以便稍后读取,或者使用xor技巧创建一个双链接列表,同时只存储一个指针。本标准涉及安全派生指针(相关条款为3.7.4.3[basic.stc.dynamic.safety])
  • 标准C++库提供了一组接口,这些接口可以用来识别指针,这些指针不能被跟踪为可到达的,或者一旦它们不再能够达到即可。也就是说,您可以定义一组根对象,这些根对象被认为是可用的,不应该被任何垃圾收集系统释放
  • 然而,实际使用这些设施的标准化标准并不存在。当然,仅仅因为没有标准,并不意味着没有使用承诺作为接口

    上述API的相关函数在20.6.4[util.dynamic.safety]中定义,要包含的标题是
    。这些功能简而言之是:

  • void std::declare_reachable(void*p)
    声明如果
    p
    是非空指针,则
    p
    是可访问对象,即使垃圾收集器已确定它不是。该函数可以分配内存,从而抛出
  • template T*std::undeclare_reachable(T*p)
    说明如果
    p
    是一个非空指针,则
    p
    将不再可访问。调用
    未声明的可到达(p)
    的次数不得超过使用同一指针调用
    声明可到达(p)
    的次数
  • void std::declare_no_指针(char*p,size\t n)
    声明从
    p
    开始的
    n
    字节范围不包含任何指针,即使垃圾收集器已确定内部将有指针
  • void std::取消声明无指针(char*p,size\t n)
    撤消声明从
    p
    开始的
    n
    字节中没有指针
  • std::pointer\u safety std::get\u pointer\u safety()noexcept
    如果实现具有严格的指针安全性,则返回
  • 我认为所有这些函数基本上都可以实现为不执行任何操作,并返回默认值或指定返回类型的参数。这些函数的指针是有一个便携式系统来通知垃圾收集器关于指针来考虑可到达的和不可跟踪的内存区域。
    未来可能会增加一定程度的垃圾收集,或者更可能是垃圾收集,但我不确定是否有具体的建议。如果添加了一些东西,它可能被称为垃圾收集,因为它实际上并没有清除所有垃圾:垃圾收集只会回收无法访问对象的内存,而不会试图销毁这些对象!也就是说,尽管系统可以重用其所在位置的内存,但它可以提供无限期活动对象的视图。

    @xmllmx:没有“示例”,这是核心语言的变化。它不是GC的实现,只是对语言进行了更改,以允许更合理的GC实现。@xmlmx:根本没有什么可演示的。最小GC支持只是意味着VC符合标准的这一部分,这只是一组编译器必须遵守的规则,以使人们能够编写GC。如果你看一看MS文章中链接的文章,你会发现“一个不支持垃圾收集并实现此处描述为无操作的所有库调用的实现是符合要求的。因此一个最小的实现是微不足道的。”没有什么可演示的。VC++2013没有GC可使用。VC实现了标准要求的“GC的最低语言支持”。它没有实现任何GC。@xmllmx:请阅读注释。“最小gc支持”并不意味着“我们实现了一个gc”。在VC的C++中没有GC实现(今天)。你想从C++中用GC来改变C++,去C++或CLI,或者现在的任何东西。