次のような宣言を持つポイントクラスについて考えてみます。
// Point.h
class Point {
public:
Point(); // Default constructor
Point(const Point & p); // Copy constructor
Point & operator=(Point source); // Copy assignment operator, needs implemented
~Point(); // Destructor
// ...
private:
double m_x; // X coordinate
double m_y; // Y coordinate
};
宿題については、私が実装するために残しているのは、コピー代入演算子だけです。
これを行う方法の標準的な答えは、コピーアンドスワップのイディオムです。
コピー割り当てにスワップ関数を使用すると、1つの問題が解決され、別の問題が作成されます(スワップ関数の実装方法)。
スワップ機能を提供する必要はないと思いますが、とにかくスワップを実装する最善の方法がわかりません。専門にするのstd::swap
ですか?名前空間もテンプレートの特殊化についてもまだ知りません。
正式には、私の質問は2つあります。
- コピー割り当てはどのように実装する必要がありますか?スワップ機能を使用している場合、どのように実装すればよいですか?
- 野生では、クラスは単純に2つの数字なので、ビッグ3のメンバーを単純に記述しないのでしょうか。
Point
コンパイラは操作を正しく最適に記述しますか?