【发布时间】:2019-03-03 14:48:12
【问题描述】:
假设我有这个对象:
struct foo {
std::unique_ptr<int> mem;
virtual ~foo() = default;
};
我无法再返回在函数中创建的 foo 对象:
foo make_foo() {
foo result;
result.mem = std::make_unique<int>({});
return result;
}
正如可能表明的那样,我需要析构函数是虚拟的,因为这将是一个基类。但是即使我使用默认的析构函数,这还不够,我仍然无法返回在函数中创建的对象。
我得到错误:
error C2280: foo::foo(const foo &): attempting to reference a deleted function
有没有办法解决这个问题?
【问题讨论】:
-
尝试添加
foo() = default;、foo(foo &&) = default;和foo &operator=(foo &&) = default;。如果您已经定义了移动赋值运算符复制构造函数/赋值运算符或析构函数,则不会隐式生成移动构造函数。 -
@user463035818 最后一条错误消息是 /usr/include/c++/6/bits/unique_ptr.h:359:7:注意:在此处声明 unique_ptr(const unique_ptr&) = delete;
-
@NathanOliver 哦,对了,我太习惯于先解决第一件事,所以我忽略了它
标签: c++ return copy-constructor unique-ptr virtual-destructor