OSDN Git Service

2012-08-26 Jonathan Wakely <jwakely.gcc@gmail.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / include / bits / unique_ptr.h
index a6f457e..23937da 100644 (file)
@@ -166,7 +166,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif
 
       // Destructor.
-      ~unique_ptr() noexcept { reset(); }
+      ~unique_ptr() noexcept
+      {
+       auto& __ptr = std::get<0>(_M_t);
+       if (__ptr != nullptr)
+         get_deleter()(__ptr);
+       __ptr = pointer();
+      }
 
       // Assignment.
       unique_ptr&
@@ -310,7 +316,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
        { }
 
       // Destructor.
-      ~unique_ptr() { reset(); }
+      ~unique_ptr()
+      {
+       auto& __ptr = std::get<0>(_M_t);
+       if (__ptr != nullptr)
+         get_deleter()(__ptr);
+       __ptr = pointer();
+      }
 
       // Assignment.
       unique_ptr&
@@ -542,10 +554,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
   /// std::hash specialization for unique_ptr.
   template<typename _Tp, typename _Dp>
     struct hash<unique_ptr<_Tp, _Dp>>
-    : public std::unary_function<unique_ptr<_Tp, _Dp>, size_t>
+    : public __hash_base<size_t, unique_ptr<_Tp, _Dp>>
     {
       size_t
-      operator()(const unique_ptr<_Tp, _Dp>& __u) const
+      operator()(const unique_ptr<_Tp, _Dp>& __u) const noexcept
       {
        typedef unique_ptr<_Tp, _Dp> _UP;
        return std::hash<typename _UP::pointer>()(__u.get());