我從一本名為C Primer Plus(Page no. 400. Chapter:8 - Adventures in Functions)的書中讀到了這部分內容
第二種方法是使用
new創建新的存盤。您已經看到過new為字串創建空間并且函式回傳指向該空間的指標的示例。以下是您如何使用參考執行類似操作:
const free_throws & clone(free_throw & ft)
{
free_throws * ptr;
*ptr = ft;
return *ptr;
}
第一條陳述句創建了一個無名
free_throw結構。指標ptr指向結構,*ptr結構也是如此。代碼似乎回傳了結構,但函式宣告表明該函式確實回傳了對該結構的參考。你可以這樣使用這個函式:
free_throw & jolly = clone(three);
這是
jolly對新結構的參考。這種方法有一個問題:當不再需要記憶體時,您應該使用delete釋放分配new的記憶體。對 的呼叫clone()隱藏了對 的呼叫new,使以后忘記使用 delete 變得更簡單。
我的疑惑:
據我所知,對于最佳實踐,您永遠不應該在未初始化的情況下取消參考指標,并且宣告指向某個結構的指標只會為該指標分配空間,而不會為整個結構分配空間,您必須為該結構單獨分配空間。根據這本書,宣告一個指標會自動為整個結構分配空間,并且指標在沒有初始化的情況下被取消參考。new呼叫函式時如何自動呼叫運算子?
uj5u.com熱心網友回復:
據我所知,對于最佳實踐,您不應該在未初始化的情況下取消參考指標
這不僅僅是“最佳實踐”,而且絕對必須不這樣做。您絕不能通過未初始化的指標進行間接訪問。
呼叫函式時如何自動呼叫new運算子?
new 不呼叫運算子。
free_throws * ptr;第一條陳述句創建了一個無名的 free_throw 結構。
這是完全錯誤的。第一條陳述句創建一個指標,根本沒有結構實體。參考的文本與代碼不匹配。
free_throw & jolly = clone(three);這使得 jolly 成為對新結構的參考。
這也是錯誤的。clone回傳對 const 的參考,對非常量的參考jolly不能系結到它。這種初始化格式不正確。
我會假設代碼是錯誤的,并且有使用的意圖new,但作者忘記了。要理解的最重要的部分是在解釋函式有問題的第三個參考中;因此,即使new按照可能的意圖“固定”使用該功能也是無用的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/370439.html
