论坛首页· 友情链接申请·申请版主· 广告投放· 道具中心· 设为首页· 收藏本站
发新话题
打印

[教程] “大三规则”或“大二规则”

“大三规则”或“大二规则”

著名的“大三规则”或“大二规则”如是说:如果一个类需要任何下列的三个成员函数之一,便三者全部要实现,这三个成员函数是:拷贝构造,赋值操作符,析构函数。一般来说,这个规则指的是从自由存储区分配内存的类。其实,很多类只要遵循“大二规则”即可,也就是说只要实现拷贝构造,赋值操作符就可以了,析构函数并不总是必需的。看下面的这个类:

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”的值不会被拷贝,因为每一个单独的对象都会被分开处理。
因为梦想而努力,因为有你而精彩!
mail: qianzongming@gmail.com

TOP

发新话题