我們有一個廣泛的代碼庫,目前使用原始指針,我希望能夠遷移到unique_ptr。但是,許多函數都將raw指針作爲參數,而unique_ptr不能用於這些情況。我意識到我可以使用get()方法來傳遞原始指針,但是這增加了我必須接觸的代碼行數,並且我覺得它有點不雅觀。我滾我自己的unique_ptr看起來像這樣:在unique_ptr上有一個演員操作符是否危險?
template <class T>
class my_unique_ptr: public unique_ptr <T>
{
public:
operator T*() { return get(); };
};
每當我到一個功能PARM一個希望將原始指針提供my_unique_ptr時,它自動地把它變成原始指針。
問題:這樣做有什麼固有的危險嗎?我原以爲這是unique_ptr實現的一部分,所以我假設它的省略是故意的 - 有誰知道爲什麼?
好吧,你可以試試'cout << my_unique_ptr()<< endl;' –
一般來說,隱式轉換是不好的。類型的存在是有原因的,轉換應該是明確的。 – GManNickG
@GManNickG:只要他們知道那個時候,裏奇定義了內建類型之間的隱含轉換。 –