为了理解构造函数和赋值,我写了一个非常简单的测试代码,如下所示:
class A {
public:
A() { std::cout<<"This is default cstr."; }
A(int i) { std::cout<<"This is int cstr. value is "<<i; }
A(const A &a) { std::cout<<"This is copy cstr."; }
A operator=(const A &a) { std::cout<<"This is assignment operator."; return *this;// this line is tricky }
};
int _tmain(int argc, _TCHAR* argv[]) {
std::cout<<"line 1 "; A a1; std::cout<<std::endl;
std::cout<<"line 2 "; A a2 = A(1); std::cout<<std::endl;
std::cout<<"line 3 "; a1 = a2; std::cout<<std::endl;
return 0;
}
对于第 3 行,我得到:
line 3 This is assignment operator.This is copy cstr.
但如果我return *this;
改为return NULL
,我得到:
line 3 This is assignment operator.This is int cstr. value is 0
有人可以为我解释一下里面发生了什么吗?