首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >现代c++中的独特指针

现代c++中的独特指针
EN

Stack Overflow用户
提问于 2016-02-04 18:35:39
回答 3查看 837关注 0票数 3

我在网上搜索了相当多,并在现代c++中找到了许多不同的c++实现示例。我已经开始将从::iterators开始的所有代码更新到auto等等。但是,有了智能指针,我想我不太明白我应该做什么。

我有一个标准指针:

代码语言:javascript
运行
复制
 object *temp = new object();

然后,使用新的智能指针:

代码语言:javascript
运行
复制
  unquie_ptr<object> temp(new object());

这不是正确的执行方式吗?如果是这样的话,当我在程序的末尾构建了一个简单的清理函数时,似乎需要更多的输入/工作来创建智能指针?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-04 18:40:17

您可以使用更多的表演性std::make_uniquestd::make_shared

然而,make_unique不在C++11中,而是在C++14和更高版本中。

所以

代码语言:javascript
运行
复制
std::unique_ptr<object> = std::make_unique<object>();

代码语言:javascript
运行
复制
auto p = std::make_unique<object>();

同样的事情也适用于shared_ptr

在C++11中,您可以将表达式用于unique_ptr

代码语言:javascript
运行
复制
unquie_ptr<object> temp(new object());
票数 7
EN

Stack Overflow用户

发布于 2016-02-04 18:40:34

您可能应该使用make_unique而不是直接调用构造函数来完全删除new & delete

代码语言:javascript
运行
复制
auto p = std::make_unique<object>();

如果是这样的话,当我在程序的末尾构建了一个简单的清理函数时,似乎需要更多的输入/工作来创建智能指针?

随着您的程序变得越来越大,您忘记使用delete创建new的可能性会越来越大,这就是为什么unique_ptr会帮助您。记住,少写代码并不意味着代码更好。

票数 4
EN

Stack Overflow用户

发布于 2016-02-04 18:54:19

智能指针是RAII (资源分配是初始化)容器,它保证在对象超出作用域时释放包含的资源。考虑一个具有多个退出点的函数,或者在函数内部的某个点抛出异常的情况。如果通过对专用函数的显式调用来执行清理,则必须在每个出口点小心调用该函数。此外,为了确保在抛出异常时不会泄漏资源,还必须在异常处理程序中调用清理函数(更不用说需要显式处理异常)。使用智能指针,如果调用异常,资源将不会泄漏,因为在解除堆栈和对象超出作用域时,它们将被自动处理。

智能指针创建一个干净的抽象,将凌乱的资源管理隔离到一个较低的级别,并确保资源不会在不经意间泄漏。

与所需的附加代码相比,初始化语法开销最小,以保证资源将通过拥有原始指针进行类似的管理。

智能指针使C++代码更安全、更小、更易于维护。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35208935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档