我有一個功能foo。在 的執行程序中foo,我想確定一個型別的物件Bar存在。讓我們稱任何碰巧為“ bar.”的物件。
我不能復制或移動bar,并且bar可以有任何存盤期限。我所知道的一件事bar是它是一個空物件。
foo不需要bar對它做任何事情或了解它。
首先想到的是,傳入一個
Bar&infoo來告訴呼叫環境,“嘿,你需要確保bar在我運行時存在!” 但是呼叫環境可以將懸空參考傳遞給foo,在這種情況下,bar將在foo運行前銷毀。第二個想法是,將 a 傳遞
shared_ptr給barin。但是(如果我錯了,請糾正我)這將需要bar具有動態存盤持續時間。第三個想法是,撰寫一個可復制和可移動的輔助型別,以保證
bar. 但這感覺就像重新發明shared_ptr輪子。
我有哪些選擇可以確保bar在 期間存在foo,它們的優勢和局限性是什么?
uj5u.com熱心網友回復:
呼叫環境可以將懸空參考傳遞給 foo
實在不行。懸空參考是不合法的,因此發生這種情況的唯一方法是呼叫者違反語言規則。我不認為這是一個令人信服的問題。
將 shared_ptr 傳遞給 bar in。但這需要 bar 具有動態存盤持續時間。
不完全的。可以使用自定義洗掉器構造 shared_ptr,因此如果呼叫者想要傳入“已分配的堆疊” Bar,他們可以使用不洗掉任何內容的洗掉器構造 shared_ptr。
bar 是它是一個空物件
那么整個練習的意義是什么?是因為Bar建構式和/或解構式具有必須在foo運行之前/之后發生的副作用嗎?如果是這樣的話,也許foo應該自己做這些事情,或者foo_wrapper可以創建一個函式來隱藏這些細節。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/360349.html
