7

私が 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)
{}
4

1 に答える 1