今天我们要来了解一些c++中的特殊类型。
1.对象不能被拷贝
我们实现的方法就是把拷贝函数和赋值运算进行私有化,或者用c++11的新特性在后面加上delete进行删除。
2.只能在堆上创建对象
实现方式就是将类的构造函数私有,拷贝构造声明成私有。防止别人调用拷贝在栈上生成对象。
我们就可以提供一个静态方法去创建对象,而不让外部自己去创建。
然后禁掉赋值运算就可以了。
3.只能在栈上创建对象。
同上将构造函数私有化,然后设计静态方法创建对象返回即可。
但是这种情况我们禁不掉————通过拷贝构造申请对象
但是如果我们直接禁止掉拷贝构造又会导致我们返回的时候出问题,属于伤敌一千,自损一万。
于是我们就可以尝试直接把new给他禁止掉。如下。
4.一个类不能被继承
1.构造函数私有,那子类继承调用不了父类的构造函数就不能继承了。
2.在c++11中推出了final,就可以对类进行结扎操作就可以了!
5.单例模式
一个类只能创建一个对象,即单例模式,该模式可以保证系统中该类只有一个实例,并提供一个
访问它的全局访问点,该实例被所有程序模块共享。
单例模式又分饿汉模式和饱汉模式
饿汉模式:就是说不管你将来用不用,程序启动时就创建一个唯一的实例对象。
我们首先封掉拷贝构造和=。
然后我们为了在一开始就加载,我们就必须在main函数之前创建,所以我们必须使用全局变量。
但是又因为我们不能在类外进行创建,所以我们可以直接在类里面创建一个类一直保留着就行。
要用的时候get就可以了。
优点:
再就是如果这个单例对象在多线程高并发环境下频繁使用,性能要求较高,那么显然使用饿汉模式来避免资源竞争,提高响应速度更好
懒汉模式
:如果单例对象构造十分耗时或者占用很多资源,比如加载插件啊, 初始化网络连啊,读取文件啊等等,而有可能该对象程序运行时不会用到,那么也要在程序一开始就进行初始化,
就会导致程序启动时非常的缓慢。 所以这种情况使用懒汉模式(延迟加载)更好。
懒汉相比于饿汉,第一次用的时候才创建,之后就直接获取即可。
其他的地方都一样,没有什么区别。