我有一个带有 Glib::ustring 成员的类(如果你不熟悉它,假设它是 std::string),它应该包含一个长字符串,即至少一个段落,也许更多。甚至可能超过 10 段。该字符串计划在 GUI 中显示,因此将来可能会将其存储在文本小部件的缓冲区中,但现在它只是我的 C++ 类的字符串成员对象。
问题是:如何将字符串传递给构造函数,以及如何将其传递给 set_string() 设置方法。长字符串意味着大副本,所以我认为一个好的解决方案是采用右值引用并将 std::move 参数放入成员对象中。但我也不希望类接口令人惊讶且难以使用/理解。你知道,最不意外的规则。
所以我在想,在这种情况下,预期/常见的解决方案是什么?
(对于 setter 方法,这里有另一个选项:由于在 GUI 中完成编辑,只需让 GUI 直接编辑字符串,然后 setter 方法的唯一用途就是以编程方式完全替换字符串,例如重置它或撤消最近的编辑)
class MyClass
{
public:
explicit MyClass (Glib::ustring str);
void set_string (Glib::ustring str);
private:
Glib::ustring str;
}
(我已经看到现有库的代码,例如 gtkmm,通过 const 引用获取字符串,但我也看到 SO 帖子的答案是按值传递以允许优化)