2016-11-04 19 views
-4

說我這樣定義的結構:這是否有效使用返回引用?

struct point { 
    int x; 
    int y; 
} 

const point & clone(point& pt) { 
    point * new_pt; 
    * new_pt = pt; // copy info, new is called? 
    return *new_pt; 
} 

我的理解是*new_pt = pt隱式調用new和堆爲複製的結構分配所需的存儲,所以new_pt不指向一個臨時變量,我可以返回對它的提及,是嗎?

+7

*「我的理解是'* new_pt = pt隱式地調用new並在複製結構的堆上分配必要的存儲空間」*您從哪裏獲得了這個想法?請停止嘗試通過試驗和錯誤學習C++,它會讓你無處可去。相反,從一本好書中系統地學習它。 –

+0

*「我的理解是* new_pt = pt隱式地調用new並在複製結構的堆上分配必要的存儲空間」*出於好奇,爲什麼您的理解?這絕對不會發生。看看這個經典:http://cslibrary.stanford.edu/104/看c + +版本。 –

+0

我不明白爲什麼一個問題和例子的敵對態度。這個例子取自於第400頁的「C++ Primer Plus」第6版2011年版本。變量的確切命名已更改爲使其成爲獨立的。書中的逐字代碼是「調用clone()隱藏()對'new'的調用......」因此使用'unique_ptr'更好。但這不是問題的關鍵。我被看作是一個'新'的存在,因此是一個問題。 – python152

回答

2

它不會*new_pt = pt很可能會崩潰(實際上未定義的行爲),因爲new_pt指向什麼都沒有。

如果您想要動態分配內存,則需要在某個時間點執行new。但是,誰會去delete的內存呢?

你的函數應該返回一個對象或者一個shared_ptr(但你必須做一個新的)。

0

我的理解是* new_pt = PT隱式調用新和在堆上分配必要的存儲爲複製的結構

point * new_pt; 

new_pt具有undertermined值。

* new_pt = pt; 

你提領new_pt,但它是不確定的,這意味着你觸發未定義行爲(這很可能會導致成崩潰)。

您的代碼嘗試將值new_pt指向pt(有效地複製它)。

相關問題