有言在先: 返回區域性物件和引用, 就像返回區域性變數的位址一樣, 非常非常危險, 要避免使用
先來看乙個入門級的程式:
#include using namespace std;
class a
};void fun(a a)
int main()
結果為:
a constructor
---編譯器自動產生的拷貝建構函式得到了呼叫。
#include using namespace std;
class a
};void fun(a a)
int main()
結果為:
---a deconstructor
a deconstructor
注意, 有兩個物件, 所以有兩次析構。
在第乙個程式中, 我們來顯式定義一下拷貝建構函式:
#include using namespace std;
class a
a(a& a) };
void fun(a a)
int main()
結果為:
a constructor
---copy constructor
可見, 拷貝建構函式確實被呼叫了
我們來繼續看:
#include using namespace std;
class a
a(a& a)
~a() };
void fun(a &a)
int main()
結果為:
a constructor
---a deconstructor
可見, 沒有物件的拷貝。 這樣, 在fun函式中, 就省略了拷貝的過程, 而是直接引用a. 節省時間, 節省空間, 真好。
#include using namespace std;
class a
a(a& a)
~a() };
a fun()
int main()
結果為:
a constructor
---a constructor
------
copy constructor
a deconstructor
a deconstructor
a deconstructor
繼續看:
#include using namespace std;
class a
a(a& a)
~a() };
a& fun()
int main()
結果為:
a constructor
---a constructor
------
a deconstructor
a deconstructor
看吧, 在函式返回的時候, 是返回引用的, 這樣, 又少了一次拷貝。
繼續看乙個稍微複雜一點的:
#include using namespace std;
class a
a(a& a)
~a() };
a fun(a a)
int main()
結果:
a constructor
---copy constructor
a constructor
------
copy constructor
a deconstructor
a deconstructor
a deconstructor
a deconstructor
對上面程式進行優化:
#include using namespace std;
class a
a(a& a)
~a() };
a& fun(a& a)
int main()
結果為:
a constructor
---a constructor
------
a deconstructor
a deconstructor
可見, 物件引用在c++中確實有很大的好處。比傳物件快捷高效, 比指標更優美。
深入理解js物件的引用
基本型別 空值 null 未定義 undefined 布林值 boolean 數字 number 字串 string 符號 symbol,es6 中新增 引用型別 物件 object const a 哈哈 const b 哈哈 console.log a b true const c const d...
深入理解C 物件模型1 關於物件
c 物件模型可以從兩個層面來解釋 本文主要從第二個方面來進行剖析。注 c 物件模型的底層實現機制並未標準化,不同的編譯器對物件模型的底層實現機制可能有所差異,但其目標都是優化物件空間和時間的訪問效率,並支援c 語言說規定的虛函式,虛基類等機制。相比於c,c 在記憶體布局以及訪問時間 效率 上的主要的...
深入理解PHP物件賦值
1 2 深入理解php物件賦值 3echo 45 obj new stdclass 6 obj name pig 7var dump obj object stdclass 1 1 89 copy obj obj copy都是new stdclass返回的同乙個識別符號的拷貝 10var dump ...