我们知道, C++编译器经常在背地里捣鬼, 定义一些默认的函数。 那如果不想用编译器生成的这些默认函数, 该怎么办呢? 很简单: 我们自己去明确声明, 不让编译器来骚扰。
比如, 如果我们要阻止类的使用进行对象拷贝和复制, 可采用如下的方式:
#include <iostream>
using namespace std;
class A
{
public:
// ...
A()
{
}
~A()
{
}
private:
// 私有化
A(const A&)
{
}
A& operator= (const A&)
{
}
};
int main()
{
A a;
A b;
A c(a); // 调用拷贝构造函数, 有error
A d = b; // 调用拷贝构造函数, 有error
b = a; // 调用赋值函数, 有error
return 0;
}
上述程序会出现编译错误, 可见, 私有化起到了作用。
另外一个在笔试、面试中常被问到的问题是: 如何确保一个类的对象不超过一个? 如下:
#include <iostream>
using namespace std;
class A
{
private:
// 禁止直接通过构造函数来生成对象
A()
{
}
public:
A *getInstance()
{
static A *p = NULL;
if(NULL == p)
{
p = new A();
}
return p;
}
};
int main()
{
return 0;
}
实际上, 我们通过私有化驳回了编译器默认的构造函数, 所以, 类的使用者无法直接通过构造函数生成对象, 比如用getInstance, 而这个就是大家熟悉的单例。
OK, 本文先说这么多。