在定义类的时候,编译器会自动为类提供两个构造函数: 1、无参构造函数 如果没有定义任何的构造函数,则会生成无参构造函数 2、拷贝构造函数 拷贝构造函数用于类之间的赋值:Test (const & t)。。。 Test t1; Test t2(t1); or QString str1; QString ...
分类:
其他好文 时间:
2018-10-12 01:25:59
阅读次数:
157
这里我们用类String 来介绍这两个函数: 拷贝构造函数是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用拷贝构造函数。为啥形参必须是对该类型的引用呢?试想一下,假如形参是该类的一个实例,由于是传值参数 ...
分类:
编程语言 时间:
2018-10-08 12:32:54
阅读次数:
175
C++ 已经拥有了拷贝构造函数, 和赋值函数,它们主要定位为浅和深度拷贝, 新增加一个移动构造函数,主要实现一个选择性重用临时对象。 编译器会对返回值进行优化,简称RVO,是编译器的一项优化技术,它涉及(功能是)消除为保存函数返回值而创建的临时对象。 -fno-elide-constructors, ...
分类:
移动开发 时间:
2018-09-30 13:02:58
阅读次数:
308
1 有如下的c++类 class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & op ...
分类:
编程语言 时间:
2018-09-21 15:19:22
阅读次数:
151
概念 如果构造函数的第一个参数是自身类型的引用,且任何额外参数都有默认值,则它是拷贝构造函数 第一个参数必须是自身类型的引用:某个函数具有非引用参数,调用过程中要进行拷贝初始化,此时要调用拷贝构造函数来拷贝实参,如果拷贝构造函数的第一个参数不是引用,我们又需要拷贝实参,这样将无限循环下去 合成拷贝构 ...
分类:
其他好文 时间:
2018-09-20 22:56:16
阅读次数:
222
拷贝构造函数 拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给函数。 复制对象,并从函数返回这个对象。 通过使用另一个同类型的对象来初始化新创建的对 ...
分类:
编程语言 时间:
2018-09-19 19:51:50
阅读次数:
229
智能指针 在智能指针中shared_ptr用来计算指向对象的指针的个数,但是如果先执行shared_ptr1=shared_ptr2,再执行shared_ptr2=shared_ptr1,这样shared_ptr1.count()和shared_ptr2.count()都为1,这就造成了循环引用,循 ...
分类:
其他好文 时间:
2018-09-18 22:55:57
阅读次数:
216
1.浅拷贝构造函数 浅拷贝构造函数:1.浅拷贝构造函数中必须对每个成员变量进行拷贝; 2.继承的类,必须对父类进行拷贝; 3.浅拷贝构造函数可省略,系统会有默认拷贝构造函数,就是对类的成员变量进行一一拷贝; 2.深拷贝构造函数-必须实现构造函数 上述代码在析构时,出现错误: 主要原因是因为使用了系统 ...
分类:
其他好文 时间:
2018-09-16 19:39:50
阅读次数:
180
多个智能指针指向同一片堆空间的需求是巨大的。 计数变量也是在堆空间里面定义的,它的生命周期和对象的生命周期相同。 添加SharedPointer.h文件: 测试程序如下: 运行结果如下: 第二个测试程序: 结果如下: 一个堆空间被三个指针指向,最终只释放一次。 编译警告: 提示我们要在SharedP ...
分类:
其他好文 时间:
2018-09-16 00:31:46
阅读次数:
230
条款05:了解C++默默编写并调用哪些函数 直入正题:4个函数。 1. default构造函数。 2. copy构造函数。 3. copy assignment操作符。(operator=) 4. 析构函数。 特点: 1. 它们都是public且inline的。 2. 它们只有在被需要(被调用)时才 ...
分类:
其他好文 时间:
2018-09-11 16:16:50
阅读次数:
102