如果经常发现自己使用这样的代码:
boost::scoped_ptr<TFoo> f(new TFoo);
Bar(f.get()); // call legacy or 3rd party function : void Bar (TFoo *)
现在,我认为智能指针可以很容易地将隐式转换运算符定义回"原始"指针类型,这将允许此代码仍然有效,并简化旧代码的"智能化">
Bar(f);
但是,它们不是——或者至少不是我找到的那些。为什么?
IMO隐式转换是c++中所有邪恶的根源,也是最难追踪的bug之一。
不依赖它们是一种很好的做法——你不可能预测所有的行为。
因为这样很容易意外绕过智能指针。例如,如果你写:-
delete f;
在你的例子中,坏事会发生。你的函数可能是相似的,它们可能存储自己的指针副本,然后破坏智能指针。至少打电话给get会迫使你思考"这安全吗?">