在简单的情况下使用scoped_ptr是否有些过分?

bal*_*lki 5 c++ boost scoped-ptr

我在这样的小函数中使用scoped_ptr.所以我不必调用删除.对于这种用法,这是否有点过分?我的团队成员更喜欢原始指针和删除.如果碰巧在非常关键的路径中使用scoped_ptr,那么使用它的成本是多少?这不应该是内联的,并且完全等同于在优化的二进制文件中使用普通删除吗?

void myfunc()
{
  boost::scoped_ptr<myobj> objptr = someFactory::allocate();
  callsomeotherfunc(objptr.get());
}
Run Code Online (Sandbox Code Playgroud)

hmj*_*mjd 8

我不确定性能是否受到影响,但scoped_ptr在此处使用可确保myfunc()异常安全:如果callsomeotherfunc()抛出异常,动态分配的内存仍将被释放.如果scoped_ptr没有使用并且callsomeotherfunc()可以抛出那么函数必须结构类似于:

void myfunc()
{
    myobj* objptr = someFactory::allocate();

    try
    {
        callsomeotherfunc(objptr);
        delete objptr;
    }
    catch (const some_exception&)
    {
        delete objptr;
        throw;
    }
}
Run Code Online (Sandbox Code Playgroud)

这很容易出错,因为函数的所有未来修改都需要确保delete objptr;在所有可能的出口点上调用.