函數返回new對象

 

 

#include <iostream>

using namespace std;

// foo()函數本質上沒什麼問題,但建議你不要這樣寫代碼
string &foo()
{
    string* str = new string("abc");
    return *str;
}
/*返回地址,不要返回指針
指針是局部變量,存儲在棧上,函數結束後會被釋放
可是指針所指的內存空間不會被釋放掉,存在堆上,只有手動回收,或者在程序完全退出時回收
*/

//引用其實是變量的別名,是指針類型。樓主的代碼在編譯器看來,引用換成了指針,實際上foo應該是這樣:
string* foo_ptr()
{
        string* str = new string("abc");
        return str;
}

int main()
{
    string & s1 = foo();
    cout << "s1:" << s1 << endl;
    delete &s1;             //拋開什麼編程規範,到這裏都沒有任何毛病,
     //string s2 = foo();   //這樣用foo()就一定會致使內存泄露

    // foo_ptr
    string* str_ptr=foo_ptr();
    delete str_ptr;

    return 0;
}
相關文章
相關標籤/搜索