如果我使用reinterpret_cast
從IInspectable*
轉換爲Object^
,我仍然負責釋放原始的IInspectable*
?reinterpret_cast從raw指針到hatted指針的引用計數規則是什麼?
顯然,當它超出範圍的生產Object^
會釋放自己,所以真正的問題是使用reinterpret_cast是否意味着一個的AddRef,賦予Object^
它自己的引用計數,或者需要我已經有了參考的所有權。
似乎有成爲爭論的期望兩種方式:一方面,一個COM操作不應該接管其輸入指針的引用計數 - 在另一方面,該名reinterpret_cast
表明,它只是重新詮釋我從「原始ABI指針」到「指向已有擁有對該對象的引用」的位,並且這將是我的工作,以確保這是有意義的)。
一般來說,我認爲reinterpret_cast是相當「愚蠢」的。它只是強制編譯器採取原始指針值,忽略源類型,並使其相信它是目標類型,即使這兩種類型無關。這在一般情況下是危險的,但在這種特殊情況下是可以的(因爲這些類型具有相同的佈局)(對象^)。 –
因演員而添加一個引用似乎沒有必要;如果臨時存在的時間只有在表達式結束時才存在,那麼爲什麼它需要一個額外的refcount/release週期?如果編譯器確實有這種行爲,我想我會認爲這會是一個錯誤。 –