gpt4 book ai didi

c++ - 安全的 std::tr1::shared_ptr 用法

转载 作者:搜寻专家 更新时间:2023-10-31 00:46:07 26 4
gpt4 key购买 nike

这种方法不安全吗?

#include <tr1/memory>

Foo * createFoo()
{
return new Foo(5);
}

int main()
{
std::tr1::shared_ptr<Foo> bar(create());

return 0;
}

或者 createFoo 会更好吗?返回 shared_ptr<Foo>对象?

最佳答案

您的示例按照您编写的方式是安全的。但是,您可以通过让工厂方法 createFoo() 返回一个自动指针而不是原始指针来使其更加防漏。这样你就可以保证不会有泄漏。

那么你得到的是:

#include <memory>
#include <tr1/memory>

std::auto_ptr<Foo> createFoo()
{
return std::auto_ptr<Foo>(new Foo(5));
}

int main()
{
std::tr1::shared_ptr<Foo> bar(createFoo());

return 0;
}

当然也可以让您的工厂方法返回一个 shared_ptr,但这可能被视为矫枉过正,因为返回的指针通常很快就会超出范围,因为它将在赋值或构造函数中使用。此外,使用 auto_ptr 可以更清楚地说明指针的预期用途,当不熟悉您的代码的人必须理解它时,这总是一个加号。

关于c++ - 安全的 std::tr1::shared_ptr 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5587258/

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