当前位置: 首页> 娱乐> 八卦 > 常州营销推广公司_谷歌推广seo_商丘seo公司_谷歌浏览器手机版下载

常州营销推广公司_谷歌推广seo_商丘seo公司_谷歌浏览器手机版下载

时间:2025/8/23 13:55:14来源:https://blog.csdn.net/m0_71071692/article/details/140793122 浏览次数:0次
常州营销推广公司_谷歌推广seo_商丘seo公司_谷歌浏览器手机版下载

一、不能被拷贝

1、设置为私有

将赋值重载和拷贝构造声明为私有:

class CopyBan1
{
public:private:CopyBan1(const CopyBan1& cb);CopyBan1& operator=(const CopyBan1& cb);
};

2、delete

在默认成员函数后加上 =delete,表示让编译器删除该默认成员函数:

class CopyBan2
{
public:CopyBan2(const CopyBan2& cb) = delete;CopyBan2& operator=(const CopyBan2& cb) = delete;
};

二、只能在堆上创建

1、构造函数私有化

class HeapOnly1
{
public:static HeapOnly1* create(){return new HeapOnly1;}~HeapOnly1(){cout << "~HeapOnly1" << endl;}//禁拷贝,防止在栈上创建对象HeapOnly1(const HeapOnly1& ho) = delete;HeapOnly1&  operator=(const HeapOnly1& ho) = delete;private:HeapOnly1(){}};

 

2、析构函数私有化

//析构函数私有
class HeapOnly2
{
public://static void Destroy(HeapOnly2* ptr)//{//	delete ptr;//}void Destroy(){delete this;}private:~HeapOnly2(){cout << "~HeapOnly2" << endl;}};

三、只能在栈上创建

class StackOnly1
{
public:static StackOnly1 create(){return StackOnly1();}//禁new(或和deletevoid* operator new(size_t size) = delete;//void operator delete(void* p) = delete;private:StackOnly1(){cout << "StackOnly1" << endl;}};

四、不能被继承

1、final

加上final关键字,表示该类不能被继承。

class NotInherit1 final
{};

2、构造函数私有化

由于派生类要调用父类的构造函数,所以将构造函数私有化。

class NotInherit2
{
private:NotInherit2(){}
};

五、单例模式

单例模式:一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。

1、饿汉模式

优点:实现简单

缺点:可能导致进程启动慢;若两个单例有启动的先后顺序,则饿汉无法控制。

//饿汉模式:提前创建好实例对象
class SingleObj1
{
public:static SingleObj1* get(){return &so;}SingleObj1(const SingleObj1& s) = delete;SingleObj1& operator=(const SingleObj1& s) = delete;void print(){cout << "print" << endl;}private:SingleObj1(){}static SingleObj1 so; //声明
};//定义
SingleObj1 SingleObj1::so;

2、懒汉模式

第一次使用实例对象时,创建对象。进程启动无负载。多个单例实例启动顺序自由控制。

//懒汉模式:第一次使用时创建
class SingleObj2
{
public:static SingleObj2* get(){if (so == nullptr){so = new SingleObj2;}return so;}SingleObj2(const SingleObj2& s) = delete;SingleObj2& operator=(const SingleObj2& s) = delete;void print(){cout << "print" << endl;}void Delete(){delete so;}class gc{public:~gc(){delete so;}};private:SingleObj2(){}~SingleObj2(){cout << "~SingleObj2" << endl;}static SingleObj2* so; //声明static SingleObj2::gc gg;
};SingleObj2* SingleObj2::so = nullptr;
SingleObj2::gc SingleObj2::gg;

 

 

 

关键字:常州营销推广公司_谷歌推广seo_商丘seo公司_谷歌浏览器手机版下载

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: