私が C++ を学んだとき、少なくとも 3 つのメソッドのルールを常に実装するように人々から言われました。
新しい "... = 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)
{}