一般情况,我们只会使用到public类型的构造函数和析构函数。这里我收集列举了protected和private的构造函数和析构函数的实例,
虽然现实中很少用到,但是对于构造函数和析构函数的可见性问题还是有很大帮助。
1 protected 类型
1>构造函数
class A
{
protected: A();
public:
int a;
}
class B : public A
{
public: B(){}
};
A a; // Error 1 error C2248: 'A::A' : cannot access protected member declared in class 'A'
B b; // ok
2>析构函数
class A
{
public:
A()
{
a = 1;
}
protected:
~A()
{
}
public:
int a;
};
class B : public A
{
public: B(){}
};
A a; //Error 1 error C2248: 'A::~A' : cannot access protected member declared in class 'A'
B b; // ok
2 private 类型的构造函数和析构函数
class A
{
private:
A():data(10){ cout << "A" << endl; }
~A(){ cout << "~A" << endl; }
public:
static A& Instance()
{
static A a;
return a;
}
void Print()
{
cout << data << endl;
}
private:
int data;
};
A& ra = A::Instance();
ra.Print();
今天无意中突然想起,c++中析构函数的可见度的问题。平时,我们一般都是将析构函数设置为public类型,这样其它任意位置都可以由编译器来调用析构函数释放掉此类实例的资源。那么析构函数是否能设置为protected或是private呢?按道理来说,是可以的,只是没觉得protected和private这两种类型的析构函数没什么用武之地。构造函数的用法就同析构函数啦。
然后在baidu了下,发现竟然真有牛人写出了这两种析构函数的实际应用。经过测试,发现确实与程序设计使用初衷相符。析构函数能用到这种地步也确实叹为观止了,不得不佩服人的想象力啊!呵呵