读书人

一个关于C++构造与析构函数的有关问题

发布时间: 2012-05-28 17:59:33 作者: rapoo

一个关于C++构造与析构函数的问题。感激!

C/C++ code
#include <iostream>using namespace std;class A{public:    int data;    A():data(0){}    ~A(){}};class B{private:    A * ptr;public:    B():ptr(0)    {        cout<<"B construct1"<<endl;    }    B(A * a):ptr(a)    {        cout<<"B constructor2"<<endl;    }    ~B()    {        cout<<"B deconstructor"<<endl;    }};int main(){    A a;    B b1;//B construct1    b1 = &a;    cout<<"end"<<endl;    return 0;};

输出:
B construct1
B constructor2
B deconstructor
end
B deconstructor

问题是这样的:
b1 = &a;为什么会引起B constructor2
B deconstructor两句输出呢?
而且是构造在前,析构在后?
它的过程是怎样的啊??
各位大侠有谁可以给我解答么?感激不尽~


[解决办法]
b1 = &a;
等价于
B tmp(&a);
b1=tmp;
[解决办法]
b1 = &a;
其实需要调用赋值函数,但没有,就先构造一个临时对象,再调用默认的赋值函数
[解决办法]
不对,可能调用了类似这个函数
C/C++ code
b1.operator = (&a) 

读书人网 >C++

热点推荐