我一直在寻找通过并与C ++ 11种不同的功能发挥,特别是在Visual Studio 2010中。
其中提到的事情是最小的垃圾收集 :
根据这一博客帖子 ,VC10支持此功能。
我的测试表明,析构函数不叫上丢失的对象,所以我不知道以他们的记忆位置是否已被释放,或者如果他们被泄漏。
我不依赖于它,以任何方式的意图,也没有找到其行为直接,明确的答案。
我一直在寻找通过并与C ++ 11种不同的功能发挥,特别是在Visual Studio 2010中。
其中提到的事情是最小的垃圾收集 :
根据这一博客帖子 ,VC10支持此功能。
我的测试表明,析构函数不叫上丢失的对象,所以我不知道以他们的记忆位置是否已被释放,或者如果他们被泄漏。
我不依赖于它,以任何方式的意图,也没有找到其行为直接,明确的答案。
最小GC支持(n2670)只意味着像功能std::declare_reachable
都包括在内,并定义什么是“安全的衍生指针”的意思,所以使某些操作,如异或指针值是不确定的行为和GC唐”吨需要担心。 又见对GC ABI了Bjarne Stroustrup的C ++ 11 FAQ和n2585:用于垃圾收集和可达性为基础的检漏最小支持 。
该提案允许GC到C ++ 11的框架内实施。 但建议本身并不意味着实现需要支持GC。 一些库如libc中++简单地实现库函数无操作。
我敢肯定,在这一点上,你的情况的内存是只泄漏掉。 但是请注意,析构函数确实不需要GC时发生运行。 假设 “§3.8对象生存期” 还提供给GC-ED指针,我们有(§3.8/ 4):
...对于一类型与非平凡的析构函数的目的, 不要求该程序要将对象占据再利用或释放的存储之前显式调用析构函数 ; 然而,如果存在于析构函数,或者如果delete表达式(5.3.5)不用于释放存储,析构函数应不被隐式地调用,并且依赖于由析构函数所产生的副作用的任何程序中没有显式调用有不确定的行为。
因此,它也可以在内存已释放,而不称为析构函数。 事实上,早期的GC建议如N2310:透明程序员导向垃圾收集C ++明确指出(N2310§7)
当对象通过垃圾收集器回收,其析构函数不被调用(当然,显式删除总是调用析构函数)。