【发布时间】:2014-07-09 01:41:56
【问题描述】:
以下代码摘自clang 3.4最新的libc++ header <functional>:
在第 1636 行:
typedef __allocator_destructor<_Ap> _Dp;
unique_ptr<__base, _Dp> __hold(__a.allocate(1), _Dp(__a, 1));
::new (__hold.get()) _FF(_VSTD::move(__f), _Alloc(__a));
__f_ = __hold.release();
为什么在这里使用unique_ptr 来管理动态分配的存储?请注意__hold 永远不会调用它的deleter,因为它最终释放了对其内部存储的控制权!
为什么不直接写如下:
__f_ = __a.allocate(1);
::new (__f_) _FF(_VSTD::move(__f), _Alloc(__a));
【问题讨论】:
-
@v.oddou,从概念上讲,分配器分配的所有存储都可以看作
dynamically allocated storage -
异常安全原因?
-
@Bryan 是对的,如果构造函数抛出会发生什么?
-
到底有什么奇怪的?唯一 ptr 是默认值。除非它是共享的,否则应该始终使用它来管理内存。
-
STL 的实现是否可读?
标签: c++ function c++11 functor