很多情况下,对于一个类,要求当前的程序中只能存在一个类的实例。例如一个程序只有一个数据库的连接,或者只有一个网络访问接口。
此时,可以将类的构造函数和析构函数声明为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 删除此类型对象。
在接口的设计层面上,防止了客户对该类型对象的错误操作。