C++ 成員函數返回引用,三種擷取傳回值的效果

來源:互聯網
上載者:User

標籤:c++   標準   stl   

這個實驗需要以下的代碼:

class Test{public:    Test(){cout << "Test" << endl;}    ~Test(){cout << "~Test" << endl;}    Test(const Test &right)    {        cout << "Test(const)" << endl;        this->a = right.a;    }    Test & operator =(const Test & right)    {        cout << "operator=" << endl;        if(&right == this){            return *this;        }        this->a = right.a;        return *this;    }    Test & geta(){return *this;}    int getdata(){return a;}private:    int a;};int main(){    Test a;    cout << "#1#" << endl;    Test s = a.geta();    cout << "#2#" << endl;    Test &p = a.geta();    cout << "#3#" << endl;    Test q;    q = a.geta();    return 0;}

上述代碼的運行結果為:

Test#1#Test(const)#2##3#Testoperator=~Test~Test~Test

分析:

#1#(Test s = a.geta();):此條語句產生了一個新的s對象。調用複製建構函式對其進行了初始化;

#2#(Test &p = a.geta();):此條語句是以引用名p來指向geta()函數返回的對象,這裡沒有多餘的操作;

#3#(Test q; q = a.geta();):這兩條語句,首先調用參數為空白的建構函式,產生對象q。接下來通過調用operator=函數對q進行了賦值;

以上三種擷取函數返回值的方式都可以正確執行。以上分析可以看出,這三種方式存在執行效率的差別。而在C++中,STL容器模板的 front() 成員函數均會返回引用。因此,這裡可以根據是否需要對容器中的值進行修改而決定需要哪個方法。甚至這三種情況的選用不當也會有記憶體泄露的危險。

C++ 成員函數返回引用,三種擷取傳回值的效果

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.