触发拷贝构造函数原型
CMyString MyString=GetMystring()
;
这里比较难理解的是,地址401160~地址401164的代码,它把传进来的返回对象this指针和局部对象的首地址当做参数传入了拷贝构造函数,返回对象的this指针的意思就是:
当我们要调用一个类的成员函数时,我们必须传入this指针,意思就是告诉函数是哪一个对象调用了它,操作了它。 这里中间插入拷贝构造函数代码助于大家理解
而传入局部对象首地址也就是把它当参数传给拷贝构造函数的形参,让函数去拷贝局部对象的一系列的成员 给 传进来的返回对象(这里也就是通过真正的拷贝构造函数,判断是否是深浅拷贝这得看代码定义)
提示:假如没有定义拷贝构造函数,编译器会对原对象与拷贝对象中的各数据成员进行直接进行数据复制,称为默认拷贝构造函数,容易出现前面所提的资源释放错误
总结:
通过代码分析可发现,GetMyString将返回对象的地址作为函数参数。在函数返回值前,利用拷贝构造函数将函数中局部对象的数据复制到参数所指的对象中,起到了返回对象的作用。
和 返回对象1 唯一不同的就是 局部对象---->返回对象 这个步骤,其它的都一样