C++ 11允许其实现执行(某些)垃圾收集实用程序。为什么标准允许这样做?我总是有这样的印象:在C++中,你不会为你不使用的东西付费。对我来说,(隐含的)GC感觉就像破坏了这个意识形态。此外,通过智能指针在C++中编写和使用显式垃圾回收实用程序并不困难。为什么C++ 11允许GC?
其次,GC会使一些有效的程序无效。例子包括指针掩码和相关的低级指针“黑客”。
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))
如果垃圾收集器获得释放用于'Foo'对象的内存的选项,那并不意味着它必须先调用'Foo'的析构函数。 – hvd
@ hvd:对。我已更新我的问题 –
语言不支持指针掩码和其他此类“低级指针黑客”;这些都是依赖于实现的。 –