C ++ - 组合复制/移动运算符和构造函数

时间:2013-10-05 08:51:40

标签: c++ copy-constructor move-semantics

现在,我有一个具有以下结构的课程:

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 个答案:

答案 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对象),则默认实现很可能正常。不要打扰这些,他们默认会在那里。复制和移动将由成员使用相应的复制移动构造函数完成。

如果你有一些特殊内容(例如某些不可移动的类),那么你需要定义这些,但你仍然可以将实现委托给另一个或另一个方法。