题目:写一个只能构造一个对象的类
整理:CmdHack
时间:2010年1月24日19:47:49
分析:
构造函数分为有参构造 无参构造 拷贝构造 三种方法
对象又分为栈中构造对象和堆中构造对象
首先来按照普通的做法写一个类如下
很显然如果单单这样可以构造无数个对象 那我设想一下如果在构造函数中做一个
限制比如 构造一个对象之后 如果产生第二个对象就将其删除如何呢
一:delete this (只对堆中的对象起作用)
二:用个静态变量做次数限制 如果产生一个对象之后再产生对象立刻调用析构函数
(如果是在栈中产生的对象 那么这个变量的生死存亡只有由系统决定即 显示
调用析构函数没有任何效果, 当然如果是在堆中产生的对象可以在析构函数
中使用delete this 显示调用析构函数可以删除对象)
所以如果构造函数属于Public 的话我们是没有办法只产生一个对象的
====
那么只有将构造函数的放在private:中了
那如果是private怎么来调用构造函数构造对象呢 成员函数么 当然不是了
成员函数的调用约定是_thiscall 没有对象怎么调用呢 那只有用刚刚学过的静态成员函数(_cdecl调用约定) 没有对象也可以调用 然后再用静态成员变量来做个数限制 具体实现过程如下