gpt4 book ai didi

c++ - 使用 shared_ptr 将原始指针传递给函数

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

当我有一个函数时:

void foo(std::shared_ptr<T> a, std::shared_ptr<T> b);

这样调用会不会内存泄露:

foo(new T(), new T());

最佳答案

由于到 shared_ptr 的转换是显式的,因此无法编译。如果我天真地解决这个问题:

foo(std::shared_ptr<T>(new T()), std::shared_ptr<T>(new T()));  // don't do this

那么确实存在内存泄漏的可能。一种允许的评估顺序是:

T * p1 = new T();
T * p2 = new T();
std::shared_ptr<T> s1(p1);
std::shared_ptr<T> s2(p2);
foo(s1,s2);

如果第二个 new 抛出异常,那么第一个对象就会被泄露。要解决此问题,请确保在尝试第二次分配之前初始化第一个共享指针,或者使用临时变量:

std::shared_ptr<T> a(new T());
std::shared_ptr<T> b(new T());
foo(a,b);

或者调用一个函数来初始化每个

foo(std::make_shared<T>(), std::make_shared<T>());

关于c++ - 使用 shared_ptr 将原始指针传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30346650/

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