class Person {
public:
string name;
public:
Person() {
name = "ttf";
}
~Person(){
cout << this->name <<endl;;
}
Person &changeName();
};
Person &Person::changeName() {
// Person p;
return *this;
}
int main() {
Person p;
Person p1 = p.changeName();
return 0;
}
就是下面这个函数返回的是一个引用
因为返回是引用并且这个对象是外部定义的,所以返回引用没有任何问题
Person &Person::changeName() {
return *this;
}
下面这个返回引用就会出问题
Person &Person::changeName() {
Person p;
return p;
}
问题在于,函数内部定义的对象,必须要在函数结束的时候回收。然而这个函数,却把定义的对象本身返回了,导致函数内部定义的这个对象不能析构。导致内存泄露。
所以如果返回函数内部定义的对象一定不要返回引用
下面是正确的
这时返回对象p的副本,原来定义的p在函数结束以后就析构了
Person Person::changeName() {
Person p;
return p;
}