就目前而言,我有一个具有以下结构的类:

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用copy-或move-constructor构造? (鉴于您提供了swap,这通常是个好主意)

更新问题后,也许这对您有用:
FooClass(const FooClass& CopyConstructor)
{
    *this = CopyConstructor;
}

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

关于c++ - C++-组合复制/move 运算符和构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19195829/

10-11 18:18