У меня есть код ниже, где я пытаюсь вернуть unique_ptr закрытой переменной-члена из функции-члена:
#include <memory>
class Interface1
{
public:
virtual ~Interface1() = default;
virtual void Show() const = 0;
};
class Interface2
{
public:
virtual ~Interface2() = default;
virtual std::unique_ptr<Interface1> Interface1Ptr() const = 0;
};
class CInterface1 : public Interface1
{
public:
CInterface1 (){}
virtual ~CInterface1() = default;
virtual void Show() const override
{
}
};
class CInterface2 : public Interface2
{
public:
CInterface2 ()
{
mifi = std::make_unique<CInterface1>();
}
virtual ~CInterface2() = default;
virtual std::unique_ptr<Interface1> Interface1Ptr() const override
{
return std::move(mifi);
}
private:
std::unique_ptr<Interface1> mifi;
};
main()
{
return 0;
}
Но я получаю ниже ошибку компиляции:
$ c++ -std=c++14 try50.cpp
try50.cpp: In member function 'virtual std::unique_ptr<Interface1> CInterface2::Interface1Ptr() const':
try50.cpp:38:22: error: use of deleted function 'std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = Interface1; _Dp = std::default_delete<Interface1>]'
return std::move(mifi);
^
In file included from C:/tools/mingw64/x86_64-w64-mingw32/include/c++/memory:81:0,
from try50.cpp:1:
C:/tools/mingw64/x86_64-w64-mingw32/include/c++/bits/unique_ptr.h:356:7: note: declared here
unique_ptr(const unique_ptr&) = delete;
^
Разве невозможно вернуть unique_ptr - я в порядке, если я тоже потеряю право собственности?