💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏
🌞
仅在堆上创建对象的类
将类的构造函数,拷贝构造私有,防止在栈上生成对象
提供静态成员函数,该静态成员函数中完成堆对象的创建,用类名::函数的方式调用该函数
目的是返回一个在堆上生成的对象
class HeapOnly
{
private:HeapOnly(){}HeapOnly(const HeapOnly& h) = delete;HeapOnly& operator=(const HeapOnly&) = delete;//防止拷贝
public:static HeapOnly* GetHeapOnly(){return new HeapOnly;}
};
仅在栈上创建对象的类
将类的构造函数私有防止在堆上生成对象
提供静态成员函数,该静态成员函数中完成堆对象的创建,用类名::函数的方式调用该函数
目的是返回一个在栈上生成的对象
注意:不能拷贝函数=delete因为该静态函数返回的是值拷贝需要调用拷贝构造
class StackOnly
{
private:StackOnly(){}void* operator new(size_t size) = delete;public:
//不能引用是因为st出栈后会被销毁static StackOnly GetStackOnly(){StackOnly st;return st;}
};
设计不能被继承的类
将基类用final关键字标志
class test final
{
private:test(const test& v) = delete;test& operator=(const test& v) = delete;
public:int _a;test(int a):_a(a){}
};
设计单例对象
单例模式
一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
//单例模式有两种情况
饿汉模式:
是说不管你将来用不用,程序启动时就创建一个唯一的实例对象
懒汉模式:
例对象构造十分耗时或者占用很多资源所以
懒汉模式延迟加载的方式更好
//单例模式的特定就是 构造函数私有 调用静态成员函数返回静态或者全局的变量/指针
饿汉模式
namespace hunry
{class Single{private:static Single tmp;Single(){}public:static Single GetInstance(){return tmp;}};
}
懒汉模式
namespace lazy
{class Single{private:static Single* tmp;Single(){}public://因为需要显示调用析构函数所以设置这个类static Single* GetInstance(){if (tmp == nullptr)return tmp = new Single;elsereturn tmp;}static Single Destory(){if (tmp == nullptr){delete tmp;tmp = nullptr;}}};Single* Single::tmp = nullptr;
}