Tho*_*ing 4 c++ garbage-collection c++11
C++ 11允许其实现执行(某些)垃圾收集实用程序.为什么标准允许这个?我一直认为在C++中你不会为你不使用的东西买单.对我来说,(隐含)GC感觉它破坏了这种意识形态.此外,通过智能指针在C++中编写和使用显式垃圾收集实用程序并不困难.
其次,GC会使一些其他有效的程序无效.示例包括指针掩码和相关的低级指针"hacks".
int * nums = new int[10];
nums += 2;
*nums = 777; // nothing points to the new'ed int[10] at this point
// oh no! nums could have gotten collected!!! (so lets assume it was)
*nums = 666; // crash (or memory corruption (or something else that's bad))
Run Code Online (Sandbox Code Playgroud)
C++ 11标准不要求GC存在,但它可能在将来的版本中.
它不会被强制执行 - 只有你提出要求它才会存在.它不会收集你的正常指针,也不会收集当前的智能指针.所以,它仍然是'不使用 - 不为它付钱'.它只适用于您明确要求它的指针,因此您的示例仍将像现在一样工作.
参见Sutter's Mill:Garbage Collection Synopsis和C++
引用计数(#1)通常是最好的,它是C++的默认GC形式.但也有理由(不是)要求在C++中使用惰性标记扫描(#2)垃圾收集来处理引用计数无法处理的事情,包括当潜在的循环不可避免时(在某些情况下某些对象可能自然而然)共享,但随后可能互相引用)和无锁ABA问题.
通过"引用计数",Sutter指的是std::shared_ptr类似的东西.
| 归档时间: |
|
| 查看次数: |
1670 次 |
| 最近记录: |