C++11 c++;11:它的gc接口是什么,如何实现?
我在看比亚恩·斯特劳斯塔普的演讲 在44:26中,他提到“C++11指定了一个GC接口” 请问什么是接口,如何实现?C++11 c++;11:它的gc接口是什么,如何实现?,c++11,garbage-collection,C++11,Garbage Collection,我在看比亚恩·斯特劳斯塔普的演讲 在44:26中,他提到“C++11指定了一个GC接口” 请问什么是接口,如何实现? 任何更详细的在线介绍,或一些示例代码来演示它吗?Stroustrup在他的文章中扩展了这一讨论,问题是GC的使用是可选的,库供应商可以自由实施一个或不实施: 垃圾收集(未引用区域的自动回收) 在C++中内存为可选< /强>;也就是说,垃圾收集器不是 强制执行的一部分。但是,C++11提供了 定义如果使用GC和ABI(应用程序),GC可以做什么 二进制接口)以帮助控制其操作 指针和
任何更详细的在线介绍,或一些示例代码来演示它吗?Stroustrup在他的文章中扩展了这一讨论,问题是GC的使用是可选的,库供应商可以自由实施一个或不实施: 垃圾收集(未引用区域的自动回收) 在C++中内存为<强>可选< /强>;也就是说,垃圾收集器不是 强制执行的一部分。但是,C++11提供了 定义如果使用GC和ABI(应用程序),GC可以做什么 二进制接口)以帮助控制其操作 指针和生命周期的规则用“安全”表示 “导出指针”(3.7.4.3);粗略地说:“指向已分配内容的指针 通过新的或其子对象。” 对普通人:[……]
支持此的C++标准(Stroustrup所指的“接口”)的功能是:
我不知道任何实际的标准C++的GC实现,但至少<强>标准正在准备它发生的基础>
>P>除了我已经投票赞成的好答案之外,我想在这里提供更多的信息(这不适合评论)。 下面是一个符合C++11标准的程序,它演示了一个实现是否支持GC接口:
#include <iostream>
#include <memory>
int
main()
{
#ifdef __STDCPP_STRICT_POINTER_SAFETY__
std::cout << __STDCPP_STRICT_POINTER_SAFETY__ << '\n';
#endif
switch (std::get_pointer_safety())
{
case std::pointer_safety::relaxed:
std::cout << "relaxed\n";
break;
case std::pointer_safety::preferred:
std::cout << "preferred\n";
break;
case std::pointer_safety::strict:
std::cout << "strict\n";
break;
}
}
这意味着实现有一个微不足道的实现,它什么都不做
libc++输出:
relaxed
VS-2015年产出:
relaxed
gcc 5.0输出:
prog.cc: In function 'int main()':
prog.cc:10:13: error: 'get_pointer_safety' is not a member of 'std'
switch (std::get_pointer_safety())
^
g++
8.2.0也会输出relaxed
,因此libstdc++
也不会实现GC。
prog.cc: In function 'int main()':
prog.cc:10:13: error: 'get_pointer_safety' is not a member of 'std'
switch (std::get_pointer_safety())
^