【发布时间】:2012-07-15 21:48:05
【问题描述】:
考虑一个点类,其声明如下:
// 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吗?我还不知道命名空间和模板专业化。
形式上,我的问题有两个:
- 应如何实施复制分配?如果它使用交换功能,我应该如何实现?
- 在野外,我会干脆不写Big Three members,因为
Point类只是两个数字?编译器会正确且最优地编写操作吗?
【问题讨论】:
-
这里编译器生成的算子不够用吗?你没有你的班级正在管理的资源。
-
这里编译器生成的版本应该够用了。但是作业要求实现所有这三个,以便练习。
标签: c++