假设我有一个类,我打算将它作为可实例化的类直接暴露给程序员:
class Base
{
public:
Base(std::string text) : m_text(std::move(text)) {}
private:
std::string m_text;
};
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.这里不需要rvalue构造函数.现在,在未来的某个时刻,我决定扩展Base:
class Derived : public Base
{
public:
Derived(const std::string &text) : Base(text) {}
};
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑:我无法在Derived中按值获取字符串,因为这就是Base已经在做的事情 - 我最终会得到2个副本和1个移动.这里的const-reference构造函数还对rvalues执行不必要的复制.
问题是:如何复制+仅移动一次(就像Base中的简单构造函数一样)而不添加更多构造函数?