1

我正在写我自己的矢量类(x,y值的容器),我不确定我应该自己实现哪些构造函数/赋值运算符,以及我可以指望编译器提供什么。很显然,我需要编写任何没有默认行为或者在任何情况下都不会自动生成的方法。但是肯定的是,如果编译器可以生成完全相同的东西,那么实现它也没有意义。矢量类应该有什么ctor /赋值运算符?

我正在使用Visual Studio 2010(这可能在C++ 11方面很重要)。如果那很重要,我的课也是模板课。

目前,我有:

template <typename T> 
class Integral2 
{ 
    // ... 

    Integral2(void) 
     : x(0), y(0) 
    {} 

    Integral2(Integral2 && other) 
     : x(std::move(other.x)), y(std::move(other.y)) 
    {} 

    Integral2(T _x, T _y) 
     : x(_x), y(_y) 
    {} 

    Integral2 & operator =(Integral2 const & other) 
    { 
     x = other.x; 
     y = other.y; 
     return *this; 
    } 

    Integral2 & operator =(Integral2 && other) 
    { 
     x = std::move(other.x); 
     y = std::move(other.y); 
     return *this; 
    } 

    // ... 
}; 

我需要拷贝构造函数/赋值运算符时,我有一招构造函数/移动运营商?

回答

1

在C++中,有Rule of Three,它提供了您应该根据哪些构造函数/操作符定义您需要的基础的指导原则。在C++ 11中,有些人认为移动语义将三条规则推到become the rule of five。有关示例实现,请参阅this thread。我建议你看看这些指导方针。