posts - 183,  comments - 10,  trackbacks - 0

不能被继承的类、不能被拷贝的类、只能定义一个对象的类

不能被继承的类
将构造函数和析构函数定义为私有的,这样派生类在构造基类子对象时就不能调用基类私有的构造函数。
class T
{
private:
 T() {}
 ~T() {}
public:
 static T* create()
 {
  return new T();
 }
 static T* release(T*& p)
 {
  delete p;
  p = 0;
 }
};
见构造函数和析构函数声明为 private ,也限制了本身的对象创建。利用静态成员函数来创建创建和释放对象。
这种方式只能在堆上创建对象。
如果还想在栈上创建对象,利用友元机制,声明友元类,可以调用友元类的 private 构造函数和析构函数,但是友元关系不能被继承。其中一个友元类 virtual 继承自含有 private 构造函数和析构函数的被友元类。

不能拷贝的类
拷贝意味着拷贝构造函数和复制运算符,将拷贝构造函数和赋值运算符声明为 protected 的,并且不需要实现。
class T
{
protected:
 T(const T& rhs);
 T& operator = (const T& rhs);
};

只能声明一个对象的类
即是单例模式
将构造函数声明为 private 以防在栈上随意定义对象
定义一个 static 的本类型指针,只是指向唯一的一个对象
定义一个 static 成员函数,用于获得指向唯一的那个对象的指针

class T
{
private:
 T() {}
 ~T() {}
 static T* pt;
public:
 static T* getInstance()
 {
  if (pt == 0)
  {
   pt = new T();
  }
  return pt;
 }
};

T* T::pt = 0;

http://www.cppblog.com/jake1036/archive/2011/05/21/146870.html
http://blog.csdn.net/xkyx_cn/article/details/2245038
http://www.cublog.cn/u3/112083/showart_2237163.html
http://blog.csdn.net/ericming200409/article/details/5975874
http://blog.csdn.net/wulibin136/article/details/6347215
http://www.cppblog.com/unixfy/archive/2011/04/29/145340.html

posted on 2011-07-23 21:48 unixfy 阅读(726) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理