对复制的控制
为了禁止对类
X
X
X对象的复制,只需简单的把复制构造函数和赋值定义为private
class X {
X& operator=(const X&);
X(const X&);
// ...
public:
X(int);
// '''
};
void f() {
X a(1);
X b = a; // error!
b = a; // error!
}
对分配的控制
将析构函数声明为private
就可以避免栈分配和全局分配,还能防止随便使用delete
class X {
~X();
// ...
public:
static void free(X* p) { delete p; }
// ...
};
X global_x; // error!
void f() {
X local_x; //error!
X* x = new X(); // ok
delete x; // error!
X::free(x); // ok!
}
相反,只允许在栈上和全局,禁止在堆上分配,则声明一个特别的operator new()
即可