我在像这样的小函数中使用scoped_ptr。这样我就不必叫删除。这对这种用法来说是过大了吗?我的团队成员更喜欢原始指针并删除。如果正好在非常关键的路径中使用scoped_ptr,将花费多少钱?这不应该内联并且完全等同于在优化的二进制文件中使用常规删除吗?

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

最佳答案

我不确定性能是否会受到影响,但是在此处使用scoped_ptr可以确保myfunc()是异常安全的:如果callsomeotherfunc()抛出异常,动态分配的内存仍将被释放。如果未使用scoped_ptrcallsomeotherfunc()可能抛出,则该函数的结构必须类似于以下内容:

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

    try
    {
        callsomeotherfunc(objptr);
        delete objptr;
    }
    catch (const some_exception&)
    {
        delete objptr;
        throw;
    }
}

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

关于c++ - 在简单的情况下使用scoped_ptr是否有过大的杀伤力?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10350937/

10-11 21:32