假设我有一个类,我打算将它作为可实例化的类直接公开给程序员:
class Base
{
public:
Base(std::string text) : m_text(std::move(text)) {}
private:
std::string m_text;
};
到现在为止还挺好。这里不需要右值构造函数。现在,在未来的某个时候,我决定扩展 Base:
class Derived : public Base
{
public:
Derived(const std::string &text) : Base(text) {}
};
这让我很烦恼:我不能在 Derived 中按值获取字符串,因为这就是 Base 已经在做的事情——我最终会得到 2 个副本和 1 个移动。此处的 const-reference 构造函数还会对右值执行不必要的复制。
问题:如何在不添加更多构造函数的情况下仅复制 + 移动一次(就像 Base 中的简单构造函数一样)?