为什么智能指针没有转换操作符回到基指针?

时间:2012-12-04 12:13:18

标签: c++ smart-pointers scoped-ptr

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

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

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

现在,我认为智能指针可以很容易地将一个隐式转换运算符定义回原始数据&#39;指针类型,这将允许此代码仍然有效,并简化“智能化”。旧代码

Bar(f);

但是,他们至少不是,而不是我发现的那些。为什么呢?

2 个答案:

答案 0 :(得分:7)

IMO隐式转换是c ++中所有邪恶的根源,也是最难追查的错误之一。

不依赖它们是一种好习惯 - 你无法预测所有行为。

答案 1 :(得分:2)

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

delete f;

在你的例子中,会发生坏事。您的函数可能类似,它们可能存储自己的指针副本,然后打破智能指针。至少打电话让你想到“这样安全吗?”