1

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

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)

4

2 回答 2

2

你的意思是喜欢

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

rhs复制或移动构造函数在哪里构造?(鉴于您提供swap,这通常是一个好主意)


更新问题后,也许这对您有用:

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

FooClass(FooClass&& MoveConstructor)
{
    *this = std::move(MoveConstructor);
}
于 2013-10-05T08:56:27.290 回答
0

如果您的类是微不足道的(您只有原始类型和 STL 对象),那么默认实现很可能正常工作。不要费心把这些写下来,默认情况下它们会在那里。复制和移动将使用各自的复制移动构造函数逐个成员完成。

如果你有一些特别的东西(例如一些不可移动的类),那么你需要定义它们,但你仍然可以将实现委托给彼此或另一个方法。

于 2013-10-05T09:00:40.530 回答