深度探索C++对象模型读书笔记-第六章执行期语意学
生活随笔
收集整理的這篇文章主要介紹了
深度探索C++对象模型读书笔记-第六章执行期语意学
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
例如: 1: void Function(int a) { 2: Object obj; 3: swithch(a) { 4: case 0 :....;return; 5: case 1 : ....;return; 6: case 2 : ....;return; 7: default : ....;return; 8: } 9: } 在上面的函數中,在switch的每個分支中,都會安插Object對象的析構函數。
一般而言,我們把Object盡可能放置在使用它的那個程序區段的附近,這么做可以節省非必要的對象產生操作和析構操作。 (注:即可能在代碼的一些分支邏輯中,根本不會走到使用對象的分支。此時最好把相應對象的創建放在對應的分支邏輯中,以避免無論使用使用都執行對象的產生和析構操作)
例如 1: void Function(int a) { 2: if (a < 0) { 3: return; 4: } 5: Object obj; 6: .... 7: return; 8: } 在上面的邏輯中,在傳入的參數a小于0的時候,是不需要使用Object對象的。因此如果在函數的開始就創建Object的話,就導致無論是否使用都會觸發該對象的創建和析構。
int *pi = new int(5);
new運算符看起來似乎是一個單一運算,實際上由兩個步驟完成的:
例如: 1: T operator+(const T&, const T&); 2: T a, b; 3: T c = a + b; 對于上面這段代碼可能如下:
臨時性對象的被摧毀,應該是對完整表達式求值過程中的最后一個步驟。該完整表達式造成臨時對象的產生。
1: ((objA > 1024) && (objB > 1024)) ? objA + objB : foo(objA, objB) 對于上面的表達式產生的任何一個臨時對象,都是在整條語句執行完之后,才可以摧毀。
例外情況:
標準要求:凡持有表達式執行結果的臨時性對象,應該存留到object的初始化操作完成為止
標準要求:如果一個臨時性對象被綁定于一個reference,對象將保留,知道被初始化值reference的生命結束,或直到臨時對象的生命scope結束——視哪一種情況先到達。
轉載于:https://www.cnblogs.com/lovemdx/p/3251676.html
總結
以上是生活随笔為你收集整理的深度探索C++对象模型读书笔记-第六章执行期语意学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL Server:OA权限管理设计的
- 下一篇: Linux c 基于内存的进程通信—共享