b站推广链接域名查询平台
文章目录
- 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.懒汉模式实现单例(需注意线程安全)
参考上一篇文章。