我有一个类Whole,通过unique_ptr持有一个类Part的对象。由于我没有为Whole提供复制构造函数,因此由于unique_ptr成员,复制构造函数被删除。以下是代码:
class Part {
};
class Whole {
public:
Whole(std::unique_ptr<Part> part) : part(std::move(part)) {
}
private:
const std::unique_ptr<Part> part; //yields error later!
//std::unique_ptr<Part> part; //ok!
};
我希望通过一个名为build()的工厂函数创建一个完整的实例。
Whole build() {
auto part = std::unique_ptr<Part>{new Part{}};
return Whole{std::move(part)};
}
我希望将它用于以下方式:
int main() {
auto whole = build();
}
只要不将Whole的Part成员的unique_ptr声明为const即可正常工作。据我所知,这是由于返回值优化防止了临时副本的创建和复制。然而,如果我将Whole::part声明为const,我的编译器会报告调用已删除的复制构造函数的问题。为什么不能使用const声明?或者这段代码有问题吗?
我正在使用GNU编译器版本:(Ubuntu 4.8.4-2ubuntu1〜14.04.1)4.8.4
std::unique_ptr<const Part> part;
? - juanchopanza