【C++总结】关于函数返回对象析构的问题

来源:互联网 发布:java离线安装包 32位 编辑:程序博客网 时间:2024/05/16 19:45
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;}
0 0
原创粉丝点击