[英]Pass a std::string ctor parameter to impl in pimpl with move semantics
這是將 std::string 參數傳遞給具有移動語義的 Impl 構造函數的正確方法嗎?
#include <string>
#include <memory>
using namespace std;
class Foo
{
struct Impl;
unique_ptr<Impl> impl_;
public:
Foo(string s);
};
struct Foo::Impl
{
string s_;
Impl(string s) : s_(std::move(s)) {}
};
Foo::Foo(string s) : impl_(make_unique<Foo::Impl>(move(s)))
{
}
或者應該將 Impl 的構造函數定義為:
Impl(string&& s) : s_(std::move(s)) {}
這是正確的方法嗎
Impl(string s): s_(std::move(s)) {}
這可以。
或者應該將 Impl 的構造函數定義為:
Impl(string&& s)
這通常不太有用,因為您無法將左值字符串作為 arguments 傳遞。也就是說,如果Foo::Foo(string s)
是調用Impl
的構造函數的唯一上下文,那么缺少通用有用性在實踐中不會成為問題,因此這也很好。
PS 一旦您在單獨的翻譯單元中實際定義Impl
,您會發現您需要讓用戶聲明Foo
的特殊成員函數(析構函數、移動、賦值),因為它們的定義取決於Impl
的定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.