gpt4 book ai didi

c++ - 在简单的情况下使用 scoped_ptr 是否有点矫枉过正?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:05:22 27 4
gpt4 key购买 nike

我在像这样的小函数中使用 scoped_ptr。这样我就不必调用 delete 了。这是这种用法的矫枉过正吗?我的团队成员更喜欢原始指针和删除。如果这恰好用在非常关键的路径中,那么使用 scoped_ptr 的成本是多少?这不应该是内联的并且完全等同于在优化的二进制文件中使用普通删除吗?

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

最佳答案

我不确定对性能的影响,但是在这里使用 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;
}
}

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com