簡體   English   中英

C ++-組合復制/移動運算符和構造函數

[英]C++ - Combining Copy/Move operators and constructors

就目前而言,我有一個具有以下結構的類:

struct FooClass {

    FooClass();
    FooClass(int CustomIndex);
    FooClass(const FooClass& CopyConstructor);
    FooClass(FooClass&& MoveConstructor);

    FooClass& operator=(const FooClass& CopyAssignment);
    FooClass& operator=(FooClass&& MoveAssignment);
};

我有什么方法可以組合復制/移動運算符,這樣就不必首先提供它們,而將調用復制/移動構造函數?

如果不是,我是否至少可以從復制/移動運算符調用復制/移動構造函數?

本質上,我想要:

FooClass(const FooClass& CopyConstructor)等於FooClass& operator=(const FooClass& CopyAssignment)

FooClass(FooClass&& MoveConstructor)等於FooClass& operator=(FooClass&& MoveAssignment)

你的意思是像

FooClass& operator=(FooClass rhs)
{
    swap(rhs);
    return *this;
}

rhs是用復制構造器還是移動構造器構造的? (鑒於您提供swap ,這通常是個好主意)


更新問題后,也許這對您有用:

FooClass(const FooClass& CopyConstructor)
{
    *this = CopyConstructor;
}

FooClass(FooClass&& MoveConstructor)
{
    *this = std::move(MoveConstructor);
}

如果您的類很瑣碎(只有原始類型和STL對象),則默認實現很可能起作用。 不要打擾寫下來,默認情況下它們會在那里。 復制和移動將使用各自的復制移動構造函數逐個成員地完成。

如果內部有一些特殊的東西(例如,一些不可移動的類),則需要定義它們,但仍可以將實現委派給另一個或另一個方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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