C++的私有构造函数和析构函数

很多情况下,对于一个类,要求当前的程序中只能存在一个类的实例。例如一个程序只有一个数据库的连接,或者只有一个网络访问接口。

此时,可以将类的构造函数和析构函数声明为private.

class db_connent
{
private:
          db_connent();
          ~db_connent();
...............
}

由于在class外部不允许访问私有成员,因此,在class外部不能构造新的对象,也不能析构对象,否则将导致编译出错。

在这种情况下,一般会有一个public的static成员函数,给用户提供调用的接口。static成员函数能够访问到class的私有域,可以将类的对象构造函数放进去。

//xxx.h文件
class db_connent
{
private:
db_connent();
~db_connent();

public:
static  db_connent*  instance();
private:
static  db_connent*  the_object;
}

//xxxx.cpp文件

static  db_connent*  db_connent::the_object=NULL;

static  db_connent* db_connent::instance()
{
if(NULL==the_object)
      {
      the_object = new db_connent();
      if(NULL==the_object)
       return NULL;
      }
return the_object;
}


总结一下,把析构函数定义为私有的,就阻止了用户在类域外对析构函数的使用。这表现在如下两个方面:

1.   禁止用户对此类型的变量进行重复定义。
2.   禁止用户在程序中使用   delete   删除此类型对象。

在接口的设计层面上,防止了客户对该类型对象的错误操作。


你可能感兴趣的:(C++的私有构造函数和析构函数)