我有这样的结构:
template <class T> struct Dimensions
{
T horizontal{}, vertical{};
Dimensions() = default;
Dimensions(const T& horizontal, const T& vertical)
: horizontal(horizontal), vertical(vertical) {}
Dimensions(const Dimensions& other) = default;
Dimensions& operator=(const Dimensions& other) = default;
Dimensions(Dimensions&& other) = default; // ?
Dimensions& operator=(Dimensions&& other) = default; // ?
~Dimensions() = default;
// ... + - * / += -= *= areNull() ...
}
我实例化Dimensions<int>
或Dimensions<double>
。由于它是trivially copyable,这里最好的策略是什么,生成移动构造函数并将赋值运算符移动为= default
或者避免= delete
的隐式运算符?
答案 0 :(得分:4)
生成移动构造函数并将赋值运算符移动为
= default
或通过= delete
避免隐式运算符?
前者,除非您希望任何尝试std::move
类型的代码无法编译。 E.g。
template <typename T>
void foo()
{
T a;
T b = std::move(a);
}
struct X
{
X() = default;
X(X&&) = delete;
};
int main() { foo<X>(); }