从私有成员变量的成员方法返回unique_ptr
Return a unique_ptr from a member method of a private member variable
我有以下代码,我试图从成员函数返回私有成员变量的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 - 如果我也失去所有权,我没事?
您已经声明了成员函数 const:
virtual std::unique_ptr<Interface1> Interface1Ptr() const ^
因此,成员是常数。您尝试复制初始化从 const 成员返回的唯一指针。由于成员是常量,因此不能从中移动它(因为移动构造函数的参数是非常量(,因此只能复制。但正如错误所示,唯一的指针是不可复制的。
不能退还unique_ptr - 如果我也失去所有权,我没事?
可以从成员的唯一指针转移所有权...但仅在非常量成员函数中。
相关文章:
- 来自 std::list 的迭代器 .end() 按预期返回"0xcdcdcdcdcdcdcdcd"但 .begin()
- 什么时候在C++中返回常量引用是个好主意
- 你能重载对象变量名本身返回的内容吗
- 为什么 Serial.println(<char[]>);返回随机字符?
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何获取std::result_of函数的返回类型
- QueryWorkingSet总是返回false
- (C++)分析树以计算返回错误值的简单算术表达式
- 访问者访问变体并返回不同类型时出错
- 如何返回一个类的两个对象相加的结果
- 为什么 std::unique 不调用 std::sort?
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- lower_bound()返回最后一个元素
- "throw expression code" 1e7 >返回 d 是什么?投掷标准::overflow_error( "too big" ) : d;意味 着?
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何取消对nullptr的屏蔽,返回正确的对象
- 奇怪的结构&GCC&clang(void*返回类型)
- 从 std::unique 返回的迭代器的用法
- SQLite INSERT 命令返回错误"column number is not unique"
- 返回c++中的unique()函数