假设我有 3 个类Base
:Derived
和Chunky
。Derived
派生自Base
,并且Base
有一个类型的成员Chunky
(Chunky
很大,除非必须,否则我不想复制它)。
这里是Base
,假设我们不能以任何方式改变它(不,我们不能为它创建一个构造函数):
class Base
{
public:
Chunky monkey;
}
Derived
看起来像这样:
class Derived : public Base
{
// option 1
Derived(Chunky const& monkey)
{
this->monkey = monkey;
}
// option 2
Derived(Chunky monkey)
{
// does this do anything useful, or am I wasting my time by calling std::move?
this->monkey = std::move(monkey);
}
}
我更喜欢选项 2,因为意图更清晰,而且我不必创建参考值,但我们仍然有std::move
什么时候monkey
不能在构造函数初始化程序列表中初始化的好处吗?你将如何解决这个问题(再次假设Base
不能改变)?
如果有人想知道,猴子在这种情况下是一个 std::function,而这个讨论并没有真正回答我的问题。