为Point类实现复制赋值运算符

时间:2012-07-15 21:48:06

标签: c++

考虑一个点类,声明如下:

// 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
};

对于家庭作业,我唯一要做的就是复制作业操作员 关于如何执行此操作的规范答案是copy-and-swap idiom

使用交换功能进行复制分配可以解决一个问题并创建另一个问题(如何实现交换功能)。

虽然我觉得不需要提供交换功能,但我不知道如何最好地实现交换。是专门化std::swap吗?我既不知道名称空间也不知道模板专业化。

正式来说,我的问题是双重的:

  1. 如何实施复制作业?如果它使用交换功能,我该如何实现呢?
  2. 在野外,我不会写Big Three members,因为Point类只是两个数字?编译器是否会正确且最佳地编写操作?

2 个答案:

答案 0 :(得分:2)

  1. 复制和交换是最佳做法。如果您不想覆盖std::swap,因为您不熟悉模板,那么您还可以编写swap_points函数或Point::swap(Point &other)成员函数。

    该(成员)函数的实现非常简单:只需在所有成员上调用std::swap

  2. 是的,在本课程中自己实施三巨头实际上是一项学术活动。

答案 1 :(得分:2)

天真在这里工作,因为Point不管理任何资源 简单地复制double值不会引发异常,因此这段代码是异常安全的(反过来又是自我赋值安全的)。

// Point.cpp

Point & operator=(Point source);
    m_x = source.m_x;
    m_y = source.m_y;

    return *this;
}