今天刚看完书上的副作用,博主觉得呢,副作用其实就在改变变量的值,也就是一个赋值操作!不过刚刚在知道上还是犯了错!!尴尬啊!! 大家都知道,c语言中的赋值操作符是自右向左结合的!! 下面有一个关于赋值中的副作用的例子: #include <stdio.h> int main() { int a = 3 ...
分类:
编程语言 时间:
2016-12-27 22:49:41
阅读次数:
420
移动语义 完成所有权的移交,当拷贝构造和赋值构造时,目标对象的所有权必须移交给我们的新的对象,原始对象将丧失所有权,_p指针将不再指向原来的那个数组; 左值与右值 C原始定义 左值:可以出现在赋值号的左边或者右边 右值:只能出现在赋值号的右边 C++的定义 左值:用于标识非临时对象或者非成员函数的表 ...
分类:
编程语言 时间:
2016-12-25 23:02:46
阅读次数:
273
为数偶类定义专用的赋值操作符 为数偶类定义专用的简写四则运算符 为数偶类定义专用的递增递减操作符 赋值操作符的返回值 除后缀递增递减操作符,应返回对象的引用,以与C++本身的语义相符合 返回对象需要额外的对象构造,降低效率 如果不需要返回值以进行连续赋值,可以将返回值设为void,但要注意此时重载的 ...
分类:
编程语言 时间:
2016-12-25 15:49:41
阅读次数:
264
场景 上一节实现了智能指针,其中的拷贝构造函数和赋值运算符是通过增加/减少指针的引用计数来操作的。但是如果是管理一个独占资源呢?我们希望在一个资源使用时被锁定,在使用完毕后被释放。 #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
先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。 执行结果:调用一次构造函数,调用两次析构函数,两个对象的指针成员所指内存相同,这会导致什么问题呢? name指针被分配一次内存,但是程序结束时该内存却被释放 ...
分类:
其他好文 时间:
2016-11-27 23:19:18
阅读次数:
207
1、模版:一定要注意参数和返回值的模版2、STL一系列的API:一定要注意返回值3、容器中的都是值拷贝,而不是引用,在执行插入时,内部实行拷贝动作,所以STL中插入类时,一般都必须:无参构造函数,拷贝构造函数,重载=运算符,必须的自己重写,达到深拷贝!!!4、一元谓词:函数只有一个..
分类:
其他好文 时间:
2016-11-22 23:59:14
阅读次数:
350
1.智能指针的由来C++中,动态内存的管理是通过一对运算符来完成的,new用于申请内存空间,调用对象构造函数初始化对象并返回指向该对象的指针。delete接收一个动态对象的指针,调用对象的析构函数销毁...
分类:
编程语言 时间:
2016-11-19 21:20:23
阅读次数:
396