我試圖評估右值引用如何影響類的設計。說我有一個現有的類如下所示右值引用和類設計
class X
{
string internal;
public:
void set_data(const char* s)
{
internal = s;
}
..
..
..
//other stuff
};
此類用於由另一個模塊是這樣的:
//another module
{
string configvalue;
X x;
//read configvalue from a file and call set
...
x.set_data(configvalue.c_str());
//use x to do some magic
..
...
}
在適當位置rvalue引用將是更好,以提供另一成員函數,像這樣
class X
{
...
...
....
void set_data(string s)
{
internal = std::move(s);
}
};
這將允許此類的客戶端使用移動語義並防止每次使用一組分配/複製操作。這是一個高度炮製的例子,但是同樣的原則適用於所有類設計而不會打破「最小接口」範例。
有關此事的任何人的見解都非常感激?
你編碼了你的建議嗎? –
@霍華德號不是嗎? – SomeWittyUsername
是的。當我實現你的前兩個'set_data'並用右值'string'調用時,我的編譯器抱怨含糊不清。當我添加你的第三個'set_data'重載時,我用左值'string'調用時也會產生歧義。 –