考虑一个点类,声明如下:
// 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
吗?我既不知道名称空间也不知道模板专业化。
正式来说,我的问题是双重的:
Point
类只是两个数字?编译器是否会正确且最佳地编写操作?答案 0 :(得分:2)
复制和交换是最佳做法。如果您不想覆盖std::swap
,因为您不熟悉模板,那么您还可以编写swap_points
函数或Point::swap(Point &other)
成员函数。
该(成员)函数的实现非常简单:只需在所有成员上调用std::swap
。
是的,在本课程中自己实施三巨头实际上是一项学术活动。
答案 1 :(得分:2)
天真在这里工作,因为Point
不管理任何资源
简单地复制double值不会引发异常,因此这段代码是异常安全的(反过来又是自我赋值安全的)。
// Point.cpp
Point & operator=(Point source);
m_x = source.m_x;
m_y = source.m_y;
return *this;
}