2013-10-05 25 views
1

因爲它現在代表,我有以下結構的類:C++ - 結合複製/移動運營商和建設者

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)

回答

2

你的意思是像

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

其中rhs是用copy或move構造函數構造的? (給你提供swap,這是一般的好主意)


你更新的問題後,也許這對你的作品:

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

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

我需要複製/移動分開,因爲複製和移動操作符的邏輯非常不同。我試圖獲得複製構造函數與複製運算符相同,並移動構造函數與移動運算符相同。 – Grapes

+0

@Grapes在這種情況下,我不明白你的問題。你可以編輯和澄清? –

+0

我可以使用這種不需要移動操作符的方式編寫移動構造器嗎?移動運算符將由編譯器生成,但仍然調用移動構造函數?我只是不想在BOTH移動運算符和移動構造函數中重複移動功能。 – Grapes

0

如果你的類是微不足道的(你只有原始類型和STL對象)很可能默認實現正常工作。不要打擾寫下來,他們會默認在那裏。複製和移動將由成員使用各自的複製移動構造函數完成。

如果你有一些特殊的內部(例如一些不可移動的類),那麼你需要定義這些,但你仍然可以委託實現彼此或另一種方法。

+0

我如何「仍然可以將實現委託給另一個人」? – Grapes