我在网上搜索了相当多,并在现代c++中找到了许多不同的c++实现示例。我已经开始将从::iterators开始的所有代码更新到auto等等。但是,有了智能指针,我想我不太明白我应该做什么。
我有一个标准指针:
object *temp = new object();然后,使用新的智能指针:
unquie_ptr<object> temp(new object());这不是正确的执行方式吗?如果是这样的话,当我在程序的末尾构建了一个简单的清理函数时,似乎需要更多的输入/工作来创建智能指针?
发布于 2016-02-04 18:40:17
您可以使用更多的表演性std::make_unique和std::make_shared。
然而,make_unique不在C++11中,而是在C++14和更高版本中。
所以
std::unique_ptr<object> = std::make_unique<object>();或
auto p = std::make_unique<object>();同样的事情也适用于shared_ptr。
在C++11中,您可以将表达式用于unique_ptr。
unquie_ptr<object> temp(new object());发布于 2016-02-04 18:40:34
您可能应该使用make_unique而不是直接调用构造函数来完全删除new & delete:
auto p = std::make_unique<object>();如果是这样的话,当我在程序的末尾构建了一个简单的清理函数时,似乎需要更多的输入/工作来创建智能指针?
随着您的程序变得越来越大,您忘记使用delete创建new的可能性会越来越大,这就是为什么unique_ptr会帮助您。记住,少写代码并不意味着代码更好。
发布于 2016-02-04 18:54:19
智能指针是RAII (资源分配是初始化)容器,它保证在对象超出作用域时释放包含的资源。考虑一个具有多个退出点的函数,或者在函数内部的某个点抛出异常的情况。如果通过对专用函数的显式调用来执行清理,则必须在每个出口点小心调用该函数。此外,为了确保在抛出异常时不会泄漏资源,还必须在异常处理程序中调用清理函数(更不用说需要显式处理异常)。使用智能指针,如果调用异常,资源将不会泄漏,因为在解除堆栈和对象超出作用域时,它们将被自动处理。
智能指针创建一个干净的抽象,将凌乱的资源管理隔离到一个较低的级别,并确保资源不会在不经意间泄漏。
与所需的附加代码相比,初始化语法开销最小,以保证资源将通过拥有原始指针进行类似的管理。
智能指针使C++代码更安全、更小、更易于维护。
https://stackoverflow.com/questions/35208935
复制相似问题