一、实现一个不能被继承的类
1、C++98 中构造函数私有化,派生类中调不到基类的构造函数,则无法被继承;
class NonInherit {
public:
static NonInherit GetInstance() {
return NonInherit();
}
private:
NonInherit()
{ }
};
2、C++11 关键字 final 可以禁止类被继承;
class NonInherit final {
};
二、实现一个类只能在堆上创建对象
构造函数私有化:
- 将类的构造函数私有化,拷贝构造声明私有,方式别人调用拷贝在栈上生成对象;
- 提供一个静态的成员函数,在该静态成员函数中完成堆对象的创建;
class HeapOnly {
public:
static HeapOnly* CreateObject() {
return new HeapOnly;
}
private:
HeapOnly()
{}
//C++98 只声明,不实现
HeapOnly(const HeapOnly& h);
//C++11
HeapOnly(const HeapOnly* s) = delete;
};
三、实现一个类只能在栈上创建对象
只能在栈上创建对象,只要将 new 的功能屏蔽掉,也就是屏蔽掉 operator new 和 定位 new 表达式;(屏蔽了 operator 实际上就是屏蔽了 new 的功能)
class StackOnly {
public:
StackOnly()
{}
private:
void* operator new(size_t size);
void operator delete(void* p);
};