如何从重载的下标[]运算符返回std :: unique_ptr&?

时间:2019-02-16 10:16:36

标签: c++ operator-overloading unique-ptr

我有一个World类,其中有一个向量,该向量持有指向Tile类的唯一指针。 World有一个get函数,该函数返回对Vector持有的unique_ptr的引用。

#include <memory>
#include <vector>
#include "Tile.h"

class World
{
public:

    std::unique_ptr<Tile>& get(unsigned int i) { return Vector[i]; }

private:

    std::vector<std::unique_ptr<Tile>> Vector;

}

我想用重载运算符替换get函数:

std::unique_ptr<Tile>& operator[](unsigned int i) { return Vector[i]; }

但是当我致电World [i]时,出现以下错误:

error C2280: 'std::unique_ptr<Tile,std::default_delete<_Ty>>::unique_ptr(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': attempting to reference a deleted function with[_Ty=Tile]

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

问题不在您发布的代码段之内。相反,将pattern="world!" text="hello world! this is python" def find_variabel(pattern,text): new_text=text.split(' ') for x in range(len(new_text)): if new_text[x]==pattern: return new_text[x+1] print (find_variabel(pattern,text)) 的返回值绑定到变量的方法很重要。该代码将失败,

operator[]

,因为它尝试复制World worldInstance; // fill the Vector in worldInstance with elements... auto element = worldInstance[0]; 对象。 std::unique_ptr<Tile>是仅移动类型,因此编译器抱怨成员函数(副本构造函数)已删除。您可以捕获返回值作为参考,

std::unique_ptr

或直接通过以下方式检索对指向对象的引用

auto& element = worldInstance[0];