#include <iostream>
struct A {
int v;
A(int x = 0):v(x) {
std::cout << "构造函数:" << this << std::endl;
}
A(const A& a) {
std::cout << "拷贝构造函数:" << this << " " << &a << std::endl;
this->v = a.v;
}
A& operator=(const A& a) {
std::cout << "拷贝运算符:" << this << " " << &a << std::endl;
this->v = a.v;
return *this;
}
~A() {
std::cout << "析构函数:" << this << std::endl;
}
};
const A& func() {
return A(3);
}
int main() {
const A& a = func();
std::cout << a.v << std::endl;
std::cout << a.v << std::endl;
}
而且析构后的a的值访问两次结果不一样,这中间发生了什么
A(3) 是临时变量,不能返回临时变量得引用。这是一个未定义行为,意味着什么都可能发生(比如值会莫名奇妙地改变)。
可以改成
A func() {
,直接返回临时变量(的拷贝)。