【发布时间】:2015-10-13 08:24:07
【问题描述】:
假设我有一个 Object MeasurementValues,它有 n 个不同的指针(这个例子只显示了指向原始类型的指针,但也可能出现指向其他复杂对象的指针)。
class MesaurementValues {
private:
int *measurement_1;
double *measurement_2;
long long *measurement_3;
//..
float *measurement_n;
int noPointer;
}
我知道,无论如何,这个例子可能有点做作。我尝试在我的代码中填写Rule of Five。
我必须这样做吗
this.measurement_x = old.measurement_x ;// for all x = {1,..,n} ?
【问题讨论】:
-
首先定义你的析构函数。这迫使您了解您的课程的实际含义。然后让所有构造函数都以析构函数有意义的方式设置对象。 (在大多数类中,析构函数应该是空的,或者该类除了析构函数处理的一件特定事情之外什么都不做。)
-
移动语义是对复制语义的“优化”。所以,问题是你的复制构造函数和 operator= 是什么样子的。
-
复制构造函数是做什么的?如果它只是对 "1,..,n" 执行赋值,那么无论如何你都不应该写它。
-
类是否拥有指针指向的对象?换句话说,正如 KerrekSB 所说,您是否希望析构函数在类被销毁时删除它们?一旦你有了所有权的概念,你就可以更好地理解如何实现五法则。就个人而言,我更喜欢Rule of Zero。
-
@Ralf Wickum。当您得出任何结论时,请告诉我们,如果任何答案满足您的问题,请礼貌地标记它。
标签: c++ move-semantics