![](/img/trans.png)
[英]Disadvantages to deleting default C++ copy and move constructors and assignment operators?
[英]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.