zoukankan      html  css  js  c++  java
  • 单例模式

    1、使用C#语言,比较简单,使用私有的构造方法和公有的静态方法返回静态实例。在C#中,赋值的时候,基本类型是整体拷贝,引用类型是复制引用。

    2、使用C++语言,有几个地方需要注意:

      a、编译器会自动生成copy构造方法和copy复制操作符,从而导致生成多个实例。为了解决这个问题,声明私有的copy构造方法和copy复制操作符,但是不定义。通过继承noncopyable是个好办法,noncopyable中声明了私有的copy构造和copy赋值,并且构造方法是protected。子类会继承父类的所有成员,只不过是不能访问父类的私有成员。

      b、静态构造方法返回引用没有问题,如果返回指针,需要考虑什么时候释放内存。正确的做法是,RAII资源获取就初始化,使用share_ptr包装返回的实例指针。

    3、在C#中 Person p = new Person(); 包括三个过程:①定义Person类型的变量,变量名为p;②在托管堆上分配一个Person对象;③变量p指向分配的Person对象。相对于C++,p是一个弱化的指针,强化的引用。为什么?

      a、C++中的指针可以做加减操作,这里的p不可以;

      b、C++中的引用必须初始化,而且不能指向其他对象,这里的p允许不初始化,同时可以指向其他对象。

    4、语句 Person p;

      在C++中,表达的意思是:在栈上定义对象,必定会调用构造方法。

      在C#中,定义一个Person类型的变量p,p指向null

  • 相关阅读:
    哲学家进餐
    文件系统
    文件读写原理(转)
    数据库join种类
    http与https区别
    数字证书(转)
    B. Rebranding
    扩展欧几里德算法、证明及其应用
    CodeForces 7C Line
    UVALive 7147 World Cup
  • 原文地址:https://www.cnblogs.com/nzbbody/p/3382931.html
Copyright © 2011-2022 走看看