,从而防止从类的外部通过new创建对象,然后在类的内部来进行实例化,并用静态变量存储到内存中,之后通过判断类是否已经被实例化,如果已经被实例化,则无需再创建对象。
主要用于项目中经常会用到的类,比如数据库类的实例化、Redis类的实例化等
1.不需要反复的创建对象实例,可以节省内存消耗
2.可以提升系统的性能
3.提供了唯一实例的受控访问,方便后期维护
singleton.md
单例模式 单件模式
保证一个类中仅有一个实例,并且提供一个访问他的全局访问点
a.
懒汉式:使用的时候才创建,
多线程访问的时候线程不安全(双检锁)
b.
饿汉式:类文件加载的时候已经创建好了对象,如果对象一直没有使用,则类对象浪费空间
1.
构造函数私有化,
2.
私有的静态指向类的实例(类外声明)
构造函数私有化(
单例模式Singleton)
一般来说,
构造函数都是放在公有区,要是把
构造函数放在
私有区在外部都构造不了对象了。在一种特殊情况下,会把
构造函数放在
私有区,不允许被外界创建对象,我们只需要一个对象即可。
class A{
public:
static A& getInstance();
setup(){...}
private:
A(const A& rhs);
A& A::getInstance(){
ststic A a;
单例模式的类就是在一个进程中只创建一个全局的实例来使用。可以封装一个宏来方便地进行函数调用。
单例模式的构造函数和析构函数都为类的private函数。对外提供一个static方法来获取类的实例。
这样类的实例就无法被其他的类所创建,只能通过对外的static接口来创建该类的实例。
namespace diagservice
class CDtcInterface
pu...
单例模式在开发当中,是将一个项目进行分组编写代码的模式,把描述同一个事物或者对象的属性和方法放在一个封装好的函数(内存空间)当中.
按照我的理解就是,将需要的模块封装在一个内部环境中,暴露出一个接口,而且就算多次调用也都是值返回第一次的执行结果。
const singleTest = function () {
let ins = null;
function newIns(i) {
return i
return function getIns
一般构造函数不是私有或者保护成员,但构造函数可以使私有成员函数,在一些特殊的场合,会把构造函数定义为私有或者保护成员。
C++类的构造函数一般不应该是私有函数,因为私有函数不能被其他类或者全局函数所使用。而创建C++实例需要调用构造函数。
所以如果构造函数是私有函数的话,除了类自己的方法之外,其他类不能构造这个类的实例。一般来说,类做出来就是让其他类使用的,而使用一个类必须先构造它的实例。所以
首先,Base、Inner、Top 三个类之间的关系是这样的:Top 是一个类,它包含一个 Inner 类的成员变量,Inner 是一个类,它包含一个 Base 类的成员变量。所以可以说 Inner 是 Top 的内部类,Base 是 Inner 的内部类。
为了给这些类添加构造函数和析构函数,并在函数中加入输出语句,我们可以这样做:
class Base {
public:
Base() {
std::cout << "Base 构造函数" << std::endl;
~Base() {
std::cout << "Base 析构函数" << std::endl;
class Inner {
public:
Inner() {
std::cout << "Inner 构造函数" << std::endl;
~Inner() {
std::cout << "Inner 析构函数" << std::endl;
Base b;
class Top {
public:
Top() {
std::cout << "Top 构造函数" << std::endl;
~Top() {
std::cout << "Top 析构函数" << std::endl;
Inner i;
现在我们可以在 main 函数中使用这些类来创建和删除对象,并在函数的各个语句执行前或后加入相应的输出信息,以方便观察构造函数和析构函数的执行情况。
int main() {
std::cout << "在创建 Top 对象之前" << std::endl;
Top t;
std::cout << "在创建 Top 对象之后" << std::endl;
return 0;
从运行结果中可以看出,在创
npm ERR! fatal: unable to access ‘https://github.com/adobe-webplatform/eve.git/‘: OpenSSL SSL_read:
13967