2

如果经常发现自己使用这样的代码:

boost::scoped_ptr<TFoo> f(new TFoo);

Bar(f.get());  // call legacy or 3rd party function : void Bar (TFoo *)

现在,我认为智能指针可以轻松地将隐式转换运算符定义回“原始”指针类型,这将允许该代码仍然有效,并简化旧代码的“智能”

Bar(f);

但是,他们没有——或者至少,不是我找到的那些。为什么?

4

2 回答 2

7

IMO 隐式转换是 C++ 中万恶之源,也是最难追踪的错误之一。

最好不要依赖它们——你无法预测所有行为。

于 2012-12-04T12:15:03.680 回答
2

因为很容易意外绕过智能指针。例如,如果你写: -

delete f;

在您的示例中,会发生不好的事情。您的函数可能类似,它们可能会存储自己的指针副本,从而破坏智能指针。至少调用 get 会迫使你思考“这安全吗?”

于 2012-12-04T12:53:43.907 回答