1. 将default构造函数声明为私有化
作用1: 只允许类内部进行初始化(singleton模式)
#include "iostream"
using namespace std;
class Base {
private:
Base() {}
Base(const Base&) {}
Base& operator=(const Base&){}
static Base* object_base;
public:
static Base* GetInstance() {
if (object_base == NULL) {
object_base = new Base();
cout << "object created" << endl;
}
else {
cout << "object exist" << endl;
}
return object_base;
}
};
Base * Base::object_base = NULL; //类静态成员变量必须在类外初始化,并且不带static
int _tmain(int argc, _TCHAR* argv[])
{
Base* base = Base::GetInstance();
return 0;
}
作用2: 防止函数调用中的值传递
2. 将copy构造函数和copy assignment操作符私有化
作用: 拒绝class的拷贝和赋值动作
- 进一步为了防止自身member函数和friend函数调用私有的copy构造函数和copy assignment操作符,可以在声明私有的同时,不定义其实现.那么在发生调用之后,会报链接error.
- 为了实现上述目的,还可以私有继承一个含有私有构造函数的基类,这样子类不声明任何构造函数的时候,编译器生成的自动版本构造函数,会尝试调用基类的对应构造函数,因而被拒绝.