当我学习 C++ 时,人们告诉我至少要实现三种方法的规则。
现在我看到了新的“... = default;” 来自堆栈溢出的 c++0x,我的问题是:
是否为这些方法定义了 c++11 标准实现,还是特定于编译器?
另外我想有一些精度:
- 就代码而言,实现是什么样的?(如果它是通用的)
- 与下面的示例实现相比,这有优势吗?
- 如果您不使用赋值/复制构造函数,
*... = delete*
具体做什么,将它们声明为私有有什么区别?答案(来自@40two)- 新的 default= 与旧的默认实现不同吗?
免责声明:当我的方法需要更高级的功能时,我肯定会自己实现它们。但是我习惯于实现赋值运算符和复制构造函数,即使我从未使用过它们,只是为了让编译器不使用它们。
我曾经做过的事情:(编辑,@DDrmmr swap/move)
//File T.h
class T
{
public:
T(void);
T(const T &other);
T(const T &&other);
T &operator=(T other);
friend void swap(T &first, T &second);
~T(void);
protected:
int *_param;
};
//File T.cpp
T::T(void) :
_param(std::null)
{}
T::T(T &other)
: _param(other._param)
{}
T::T(T &&other)
: T()
{
swap(*this, other);
}
T &T::operator=(T other)
{
swap(*this, other);
return (*this);
}
friend void swap(T &first, T &second)
{
using std::swap;
swap(first._param, second._param);
}
T::~T(void)
{}