Effective C++: 函数返回std::unique_ptr的拥有权.

#include <memory>
#include <functional>
class Deleter{
 public:
  template<typename T>
  void operator()(T* pointer)noexcept
  {
   delete pointer;
   pointer = nullptr;
   std::cout<<"user-defined Deleter"<<std::endl;
  }
};
auto UserDeleter = std::bind(Deleter(), std::placeholders::_1);
template<typename Ty>
std::unique_ptr<int, decltype(UserDeleter)> make_unique(Ty&& params)
{
 std::unique_ptr<int, decltype(UserDeleter)> temp_unique(nullptr, UserDeleter);
 temp_unique.reset(new int(params));
 
 std::cout<<"enter unique"<<std::endl;
 return temp_unique; //相当于std::move(temp_unique).
 //注意上面!!!!!!!!!!!!!!!!!!! 
}
int main()
{
 std::unique_ptr<int, decltype(UserDeleter)> first = make_unique(10); //ok!!!!!!
 
 return 0;
}

你可能感兴趣的:(Effective C++: 函数返回std::unique_ptr的拥有权.)