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()函式,執行完後,這個一次性的無名物件就會銷燬,即呼叫解構函式。
同時,返回物件的話也不能在後續對它進行左值運算,編譯器通不過而且也毫無意義,因為之後程式設計師是沒法訪問到這個無名變數的
僅此個人觀點,有問題歡迎指正。