描述
c++ 函数返回std::unique_ptr类型的数据时需要返回引用类型,否则会报如下错误
error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp =
代码示例
错误代码:
// my_class.h
class MyClass
{
public:
// 未返回引用类型编译报错
static std::unique_ptr<MyClass> Instance();
private:
MyClass() = default;
static std::unique_ptr<MyClass> instance;
}; // class MyClass
// my_class.cpp
std::unique_ptr<MyClass> MyClass::instance = NULL;
std::unique_ptr<MyClass> MyClass::Instance()
{
static std::once_flag flag;
std::call_once(flag, [&]()
{
instance.reset(new MyClass);
});
// 函数未返回引用类型编译报错 error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp =
return instance;
}
正确代码:
// my_class.h
class MyClass
{
public:
static std::unique_ptr<MyClass> &Instance();
private:
MyClass() = default;
static std::unique_ptr<MyClass> instance;
}; // class MyClass
// my_class.cpp
std::unique_ptr<MyClass> MyClass::instance = NULL;
std::unique_ptr<MyClass> &MyClass::Instance()
{
static std::once_flag flag;
std::call_once(flag, [&]()
{
instance.reset(new MyClass);
});
return instance;
}