声明一个C++字符串 声明一个C++字符串 string类的构造函数和析构函数如下: string s; //生成一个空字符串s string s(str) //拷贝构造函数 生成str的复制品 string s(str,ss) //将字符串str内以ss开始的部分当作字符串的初值 string s ...
分类:
其他好文 时间:
2017-01-21 15:54:09
阅读次数:
183
一,字符串的概念 1.字符串与字符指针的比较 string是STL封装的一个类,char *是一个指向字符的指针,string是对char *的封装,是一个char *的容器。 string不需要考虑内存的释放和越界,string会管理char *的内存,在构建,赋值,销毁等操作都是由string自 ...
分类:
其他好文 时间:
2017-01-17 00:21:27
阅读次数:
188
1、类成员为const类型 2、类成员为引用类型 运行结果: 究其因 const对象或引用只能初始化但是不能赋值。构造函数的函数体内只能赋值而不是初始化,因此初始化const对象或引用的唯一机会是构造函数函数体之前的初始化列表中。 从无到有叫初始化,初始化(调用拷贝构造函数)创建了新对象;赋值(调用 ...
分类:
其他好文 时间:
2017-01-14 17:09:18
阅读次数:
148
啥是POD类型? POD全称Plain Old Data。通俗的讲,一个类或结构体通过二进制拷贝后还能保持其数据不变,那么它就是一个POD类型。 平凡的定义 1.有平凡的构造函数 2.有平凡的拷贝构造函数 3.有平凡的移动构造函数 4.有平凡的拷贝赋值运算符 5.有平凡的移动赋值运算符 6.有平凡的 ...
分类:
编程语言 时间:
2017-01-11 13:04:28
阅读次数:
283
一,对象的动态建立和释放 1.什么是对象的动态建立和释放 通常我们创建的对象都是由C++编译器为我们在栈内存中创建的,我们无法对其进行生命周期的管理。所以我们需要动态的去建立该对象,因此我们需要在堆内存中创建对象和释放对象。在C语言中为我们提供了malloc()函数和free()函数来为我们提供在堆 ...
分类:
编程语言 时间:
2017-01-10 19:16:29
阅读次数:
189
什么时候需要定义自己的拷贝构造函数: 当类中包含有,动态分配成员 或者 指针 的时候。 如果使用默认构造函数,则新构造出来的 新类 和 旧类 里面的指针成员 指向同一个空间, 而当其中一个类 清空掉那个空间 。另一个类的指针就会变成野指针(因为空间已经被清空) , 也就是说默认构造函数是复制值(地址 ...
分类:
其他好文 时间:
2016-12-30 01:47:33
阅读次数:
207
场景 上一节实现了智能指针,其中的拷贝构造函数和赋值运算符是通过增加/减少指针的引用计数来操作的。但是如果是管理一个独占资源呢?我们希望在一个资源使用时被锁定,在使用完毕后被释放。 #include #include #include using namespace std; mutex mu; i... ...
分类:
其他好文 时间:
2016-12-23 01:46:51
阅读次数:
181
EC笔记:第二部分:12、复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ private: double x; double y; public: Point()... ...
分类:
其他好文 时间:
2016-12-21 02:46:01
阅读次数:
308
QObject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY() 宏放在了private区域。因此所有继承自QObject的类都使用这个宏声明了他们的拷贝构造函数和赋值操作符为私有。 为什么要这样做? 我们都 ...
分类:
其他好文 时间:
2016-12-19 13:35:05
阅读次数:
161
之前写拷贝构造函数的时候,以为参数为引用,不为值传递,仅仅是为了减少一次内存拷贝。然而今天看到一篇文章发现自己对拷贝构造的参数理解有误。 参数为引用,不为值传递是为了防止拷贝构造函数的无限递归,最终导致栈溢出。 下面来看一个例子: class test { public: test() { cout ...
分类:
编程语言 时间:
2016-11-28 20:31:05
阅读次数:
177