1.使用析构函数后,不能在栈上创建类,需要使用相应的销毁函数来完成,例如:
class A
{
~A(); //A can not created on the stack.
public:
static A* CraeteInstance(); //生成一个堆上的A
static void ReleaseInstance(A*);//释放A
}
2.保护作用域,只能被友元类访问到,就像JAVA里面的匿名类一样。
#include <iostream>
using namespace std;
class B;
class A
{
friend class B;
~A() {}
public:
void show(void) const { cout << "A::Show(void)" << endl; }
};
class B
{
public:
void func() const
{
A a;
a.show();
}
};
int main(void)
{
B b;
b.func();
// A a; Error!!!
// a.show(); Error!!!
return 0;
}
class objpool;
class obj
{
private:
obj();
~obj();
public:
...
friend class objpool;
};
class objpool
{
init()
{
// instantialize objs and put into a pool
}
public:
obj& get(){...}
obj* getHandle() {...}
void dispose(obj& o) {...}
void dispose(obj* oh) {...}
};