一个关于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)