读书人

求解释 构造函数解决方案

发布时间: 2012-03-24 14:00:46 作者: rapoo

求解释 构造函数

C/C++ code
#include <iostream.h>class B{    private:    int   m_nData;    public:    B( int nData = 0)    {        m_nData = nData;        cout << "B()" << endl;    }    //如果自定义的拷贝构造函数 那么系统不提供默认的拷贝构造函数(做了逐域赋值)    //适用情况 有指针且 指向分配的内存    B( const B& obj )    {        *this = obj;        cout << "B copy constructor ()" << endl;    }    B SetObj( B obj)    {        return obj;    }};int main(int argc, char* argv[]){    B theB(10);    cout << hex << &(theB.SetObj(theB)) << endl;     return 0;}


我想问下theB的地址和输出的地址 中间那4字节被什么吃了 我跟了一圈没发现用到过中间那个地址
我系统中 中间那地址是0012ff78
也就是
&theB = 12ff7c
&(theB.SetObj(theB)) = 12ff74
中间地址78全C 也不像是因为拷贝构造了0ah

蛋疼啊 附图最好 谢谢了


[解决办法]
第一次可以叫局部对象,这个名字叫obj

第二次叫无名对象,它在main函数帧中。

在进入你的成员函数之前,main中的局部对象通过拷贝构造函数,构造你了的obj,

SetObj( 局部对象,也就是形参)



探讨

那个&(theB.SetObj(theB))乃最后返回的地址
中间创建了 两个
你说的那个无名对象是第几次创建的

第一次乃传参调用了构造拷贝 第二次返回时又调用了次构造拷贝

读书人网 >C++

热点推荐