我们有一个广泛的代码库,目前使用原始指针,我希望能够迁移到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:只要他们知道那个时候,里奇定义了内建类型之间的隐含转换。 –