我写了一个简单的链表,因为最近的一次面试编程挑战向我展示了我的 C++ 已经生锈了。在我的列表中,我声明了一个私有副本构造函数,因为我想明确避免制作任何副本(当然还有懒惰)。当我想按值返回一个拥有我的列表之一的对象时,我遇到了一些麻烦。
class Foo
{
MyList<int> list; // MyList has private copy constructor
public:
Foo() {};
};
class Bar
{
public:
Bar() {};
Foo getFoo()
{
return Foo();
}
};
当我尝试按值返回 Foo 对象时,我收到一个编译器错误,指出 MyList 有一个私有复制构造函数。Return-Value-Optimization 是否应该否定任何复制的需要?我需要编写一个复制构造函数吗?在我开始寻找这个问题的解决方案之前,我从来没有听说过移动构造函数,这是最好的解决方案吗?如果是这样,我将不得不阅读它们。如果不是,解决此问题的首选方法是什么?