现在,我有一个具有以下结构的课程:
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)
答案 0 :(得分: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);
}
答案 1 :(得分:0)
如果您的类很简单(您只有原始类型和STL对象),则默认实现很可能正常。不要打扰这些,他们默认会在那里。复制和移动将由成员使用相应的复制移动构造函数完成。
如果你有一些特殊内容(例如某些不可移动的类),那么你需要定义这些,但你仍然可以将实现委托给另一个或另一个方法。