2

我们只是在这里讨论了关于显式声明特殊成员函数的讨论。这样做是不好的做法吗?我的意思是:编译器生成的版本执行成员操作。如果我实现完全相同的方法(考虑三/五的规则),除了它需要更多的工作,这是一个不好的做法吗?

当然,可以说它是多余的并且使代码库膨胀。其他人声称具有显式声明可以简化调试(例如,每当复制对象时我都可以设置断点)。

那么写一个像Explicit(下面,基于维基页面的例子)这样的类是不好的做法还是只是个人品味?

class Explicit {
    string msg;
public:
    Explicit() : msg("") {}
    Explicit(const Explicit& other) : msg(other.msg) {}
    Explicit& operator=(const Explicit& other) {
        if (this != &other) { msg = other.msg; }
        return *this;
    }
    ~Explicit()  {}
};
4

1 回答 1

4

真正的冗余在于您将在这些特殊成员函数的实现中提及您的数据成员。

像所有冗余一样,这冒着有一天你会改变一个,而不是另一个的风险,例如添加一个数据成员而忘记更新特殊的成员函数。

使用 C++11= default结构没有任何问题,因为它避免了这种特殊的冗余。

于 2013-08-19T11:28:45.877 回答