簡體   English   中英

將 std::string ctor 參數傳遞給具有移動語義的 pimpl 中的 impl

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM