【C++特殊类的设计】
文章目录
- 1.设计一个类,不能被拷贝
- 2.设计一个类,只能在堆上创建对象
- 3.设计一个类,只能在栈上创建对象
- 4.设计一个类,不能被继承
- 5.设计一个类,只能创建一个对象
1.设计一个类,不能被拷贝
禁止该类的拷贝构造和赋值重载即可。
class CopyBan
{
//...
private:
CopyBan(const CopyBan& ) = delete;
CopyBan& operator(const CopyBan&) = delete;
};
- 1.设计成私有,如果只声明编译器删除掉该默认成员函数,而不设计成私有的话,可以再类外进行定义,就不能禁止拷贝了。
2.设计一个类,只能在堆上创建对象
1.将构造函数和拷贝构造私有化,防止被人调用拷贝构造在栈上创建对象。
2.提供一个静态成员函数,返回new的对象。
class HeapOnly()
{
public:
static HeapOnly* CreateObject()
{
return new HeapOnly;
}
private:
HeapOnly(); //只声明不实现
HeapOnly(const HeapOnly&) = delete;
};
3.设计一个类,只能在栈上创建对象
1.将构造函数私有化,提供一个静态成员函数接口返回即可。
2.禁掉operator new 和 operator delete,防止被人在堆上创建对象。
class StackOnly
{
public:
static StackOnly CreateObject()
{
return StackOnly();
}
private:
StackOnly();
:_a(0)
{}
void* operator new(size_t size) = delete;
void* operator delete(void* ptr) = delete;
private:
int _a;
};
4.设计一个类,不能被继承
1.C++98实现方法:构造函数私有化,这样子类的构造中就无法调用到父类的构造,就无法被继承。
class NonInherit()
{
private:
static NonInherit GetInstance()
{
return NonInherit();
}
private:
NonInherit()
{}
};
C++11方式实现
C++11中,有一个关键字final,表示该类不能被继承
class NonInherit final
{
};
5.设计一个类,只能创建一个对象
1.饿汉模式实现单例
2.懒汉模式实现单例(需注意线程安全)
参考上一篇文章。