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的情况下修改类中的值?
答案 0 :(得分:4)
A
数据成员的存在, unique_ptr
无法复制。 GetTitle()
成员函数尝试复制A
,因为它按值返回A
,从而导致(误导性)错误。
如果您希望能够复制A
,则需要提供复制构造函数定义。
总的来说,你的例子很奇怪。如果A
是唯一的资源,您是否应该在该成员函数中复制它?如果A::title
实际上包含指向从A
派生的类的指针,该怎么办?然后复制操作无法按预期工作。