08 2013 档案

摘要:最近老是在想C++的内存控制机制,查了一些资料所以有点想法,自己记录一下免得以后自己忘了。1. 需求在做线性代数的算法时,首要的就实现Matrix这个类。由于Matrix的行列可变化,所以必须使用动态的内存分配。动态的内存分配就必须要考虑内存的申请和释放,以及动态内存在不同对象之间的传递机制。考虑到算法的复杂性,所以在Matrix之外不打算使用指针,以降低算法实现的复杂度。2. 可实现的方法总体上,我能找到的方法有以下2种。利用默认的构造复制构造函数和默认重载以及赋值操作函数动态申请和释放内存和引用计数机制实现不同对象之间对同一块内存的共享,最后只有一个对象负责将动态申请的内存块释放掉,例如O 阅读全文
posted @ 2013-08-29 23:08 ledao 阅读(1237) 评论(0) 推荐(1)
摘要:C++引用现在分为左值引用和右值引用。其实很好理解,左值引用中的左值指的就是能出现在等号左边的值(带名称的变量,带*号的指针等一类的数据),程序能对这样的左值进行引用获得其地址;右值引用中的右值指的就是出现在等号右边的值(常量数字,或者函数的返回值(不能是左值引用类型),计算式的返回值等匿名不可访问的数据),程序能对这样的右值进行引用获得其地址。也不知道对不对,反正可以简单的理解为:能对其进行赋值操作的都是左值,不能对其进行赋值的都是右值。引入右值引用的目的之一是实现移动语义。移动语义的引入是为了解决在进行大数据复制的时候,将动态申请的内存空间的所有权直接转让出去,不用进行大量的数据移动,既节 阅读全文
posted @ 2013-08-28 23:44 ledao 阅读(3990) 评论(0) 推荐(1)
摘要:void Swap(int &a,int &b){ int temp=a; a=b; b=temp;}void Perm(vector& list, int k, int m){ if(k==m) { for(int i=0; i<=m; i++) cout << list[i]; cout << endl; } else for(int j=k; j<=m; j++) { Swap(list[k],list[j]); ... 阅读全文
posted @ 2013-08-03 20:26 ledao 阅读(280) 评论(0) 推荐(0)