为什么智能指针没有转换运算符回到基本指针?



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

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会迫使你思考"这安全吗?">

相关内容

  • 没有找到相关文章

最新更新