“大三规则”或“大二规则”
著名的“大三规则”或“大二规则”如是说:如果一个类需要任何下列的三个成员函数之一,便三者全部要实现,这三个成员函数是:拷贝构造,赋值操作符,析构函数。一般来说,这个规则指的是从自由存储区分配内存的类。其实,很多类只要遵循“大二规则”即可,也就是说只要实现拷贝构造,赋值操作符就可以了,析构函数并不总是必需的。看下面的这个类:
class Year
{
private:
int y;
bool cached; // 该类的对象实例可被缓冲或隐藏吗?
public:
//...
Year(int y);
Year(const Year& other) // 被缓冲或隐藏的对象不能实现拷贝
{
y = other.getYear();
}
Year& operator =(const Year&other) //被缓冲或隐藏的对象不能实现拷贝
{
y = other.getYear();
return *this;
}
int getYear() const { return y; }
};//注意: 这个类(Year)不需要析构函数
在这个例子中,类 Year 在构造期间并不从自由存储区分配内存,也不需要获取其它的任何资源。但是,这个类需要一个用户定义的拷贝构造函数和赋值操作,以便保证成员“cached”的值不会被拷贝,因为每一个单独的对象都会被分开处理。
搜索更多相关主题的帖子:
大二规则 大三规则