当一个类被实例化时,编译器默认会提供以下构造函数和其他特殊成员函数,前提是你没有定义它们:
可以自定义构造函数,并且给一些值赋值,比如
如果你自定义了带参数的构造函数,那么编译器不会去定义默认构造函数,如果需要必须显示定义
这里说说两者区别,
拷贝构造函数用于创建一个新对象,并用一个已有对象来初始化它。通常在以下情况下调用:
- 一个对象以值传递的方式传入函数。
- 一个对象以值传递的方式从函数返回。
- 用一个已有对象初始化新对象
就是说,值传递的时候,创建临时变量就会使用拷贝构造函数。
拷贝赋值运算符用于将一个已有对象的值赋给另一个已存在的对象。通常在以下情况下调用:
- 一个对象已经存在,需要将另一个对象的
在于其中不涉及新变量的建立
单例模式要求对象创建受到控制,默认的构造函数是公共的,所以需要限制这些提供给外部创造类实例的构造函数。
删除这些函数,然后把默认构造函数设置为private,
这样对于外部,是无法创建任何该对象的实例的。
而对于类内部,我们引入静态变量
TaskQueue * TaskQueue::m_taskQ = new TaskQueue;
关于这句话,一个是如果是静态变量初始化,你需要带上他的变量类型,就是TaskQueue *;
第二个就是类的静态成员就是在外部初始化的,所以他这里的能够new,是相当于在类内的,所以是能够调用私有的默认构造函数。
第三就是因为静态成员变量的定义和初始化只能在类定义外部进行一次,不能在main里进行。
综上,上述为饿汉模式的单例,代码在main之前就有了一个实例的位置,在main里面你只能能通过成员函数getInstance来得到这个实例。
懒汉模式就是需要用时我们再创建,比如
这里就是需要时再创建,可以节省内存,静态变量只是不能在main里初始化,而不是不能赋值。
这样就是单例模式:只有一个实例,有一个全局访问点