假设我有一个类,我计划直接将其公开为可实例化的类给程序员使用:
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构造函数还会对rvalue执行不必要的复制。
问题是:如何仅复制+移动一次(就像Base中的简单构造函数一样),而不添加更多构造函数?
Derived(std::string x) : Base(std::move(x)) { }
这样的语法?或者直接继承基类的构造函数? - Kerrek SB