错误“尝试引用已删除的函数” - 传回unique_ptr

时间:2015-05-12 21:41:56

标签: c++ c++11 unique-ptr

Test.h

#include <memory>
#include <string>
using namespace std;

class A
{
public:
    A GetTitle();
private:
    unique_ptr<A> title;
};

Test.cpp的

#include <memory>
#include "Test.h"

A A::GetTitle()
{
    return *this->title.get();
} // Error here

int main()
{
}

我收到以下错误:

  

C2280:'std :: unique_ptr&gt; :: unique_ptr(const   的std ::的unique_ptr&LT; _Ty,性病:: default_delete&LT; _Ty&GT;&GT; &amp;)':试图   引用已删除的功能

我在这里做错了什么?归结为this->keyServer的所有权吗?我如何只返回值,以便我根本不允许函数的用户在不使用setter的情况下修改类中的值?

1 个答案:

答案 0 :(得分:4)

由于A数据成员的存在,

unique_ptr无法复制。 GetTitle()成员函数尝试复制A,因为它按值返回A,从而导致(误导性)错误。

如果您希望能够复制A,则需要提供复制构造函数定义。

总的来说,你的例子很奇怪。如果A是唯一的资源,您是否应该在该成员函数中复制它?如果A::title实际上包含指向从A派生的类的指针,该怎么办?然后复制操作无法按预期工作。