C++返回對象和返回引用

來源:文萃谷 1.86W

C++返回對象和返回引用

C++返回對象和返回引用

引用的本質是對裸露的地址的二次包裝,它實際返回的還是一個變量或對象的地址,因此如果返回引用不可以返回局部變量的,因為函數在返回之後,該變量就銷燬。下面是其C++返回對象和返回引用,一起來學習下吧:

 代碼是對運算符*進行重載,返回引用和返回對象有不同的結果。

[cpp] view plain copy#include

using namespace std;

class A

{

public:

A() { cout << "A::A()" << endl;}//A構造函數

A(A& another){cout << "A(A& another)" << endl;}

~A(){ cout << "~A::A()" << endl;}//A析構函數

void func(){ cout << "class A::void func()" << endl;}

};

class B

{

public:

B(A* p) :_p(p){cout << "B::B()" << endl;}//B構造函數

~B(){ cout << "~B::B()" << endl; }//B析構函數

A operator*(){ //運算符重載*

return *_p;

}

private:

A* _p;

};

int main(){

A p1;

B p2(&p1);

(*p2)();

return 0;

}

中,返回的是A類的對象,之後會調用A中的拷貝構造器

A(A& another);

即用*_p的'值作為參數,在內存中構造一個新的對象,但它沒有名字,是無名對象,之後運行該無名對象中的func()函數,運行完後,這個一次性的無名對象就會銷燬,即調用析構函數。

同時,返回對象的話也不能在後續對它進行左值運算,編譯器通不過而且也毫無意義,因為之後程序員是沒法訪問到這個無名變量的

僅此個人觀點,有問題歡迎指正。

熱門標籤