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   删除此类型对象。

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 5,831评论 0 9
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,946评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,421评论 19 139
  • Introduction to C++ (Season 1) Unit 1: Overview of C++ 第1...
    我是阿喵酱阅读 7,673评论 0 7
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 6,210评论 0 3