|
|
先说下自己的错误
居然会忘:
HasPem d;HasPem p = d;//这个调用的是复制函数;
HasPem d; HasPem p; d=p;//这个才是调用的赋值函数;
//也就是只要跟类初始化没关的才走赋值,其他就复制。
再说下移动函数
首先,移动构造函数是基于右值引用。
第一它是为了操作临时变量,(98里面,函数结束会对临时变量内存释放)。第二当出现减少复制函数带来的多余内存开辟。(当然如果用指针new就可以解决,但是对象可以自己释放内存)
然后,复制函数为了安全等考虑一般会开辟内存的复制。
当程序猿希望在复制的时候能走节约内存的移动函数路线时,就可以用std::move
Moveable a; Moveable c(std::move(a));//这样c就完全是走a的移动路线得到的。
//但是依旧有内存问题,那就是a的成员改变,生命周期内的调用。