C++ std::make_unique和std::make_shared用法小结

 更新时间:2023年11月15日 09:32:04   作者:千山万水人海中666  
本文主要介绍了C++ std::make_unique和std::make_shared用法,使用std::make_unique和std::make_shared能够简化动态分配内存和构造对象的过程,提高代码的安全性和可读性,感兴趣的可以了解一下

std::make_unique 和 std::make_shared 是 C++11 引入的两个辅助函数,用于创建动态分配的智能指针 std::unique_ptr 和 std::shared_ptr,分别帮助避免了显式使用 new 和 delete,从而提高代码的安全性和可读性。

std::make_unique:

#include <memory>

int main() {
    // 使用 std::make_unique 创建动态分配的对象
    std::unique_ptr<int> uniquePtr = std::make_unique<int>(42);

    // 使用动态分配的对象
    std::cout << *uniquePtr << std::endl;

    // 不需要手动释放内存,unique_ptr 会在其生命周期结束时自动释放
    return 0;
}

std::make_unique 接受可变数量的参数并返回一个 std::unique_ptr,它在分配内存和构造对象时是一个原子操作。使用 std::make_unique 的优点是可以避免内存泄漏,因为它将分配和构造操作合并在一起,如果构造函数抛出异常,std::make_unique 会确保释放已分配的内存。

std::make_shared:

#include <memory>

int main() {
    // 使用 std::make_shared 创建动态分配的对象
    std::shared_ptr<int> sharedPtr = std::make_shared<int>(42);

    // 使用动态分配的对象
    std::cout << *sharedPtr << std::endl;

    // 不需要手动释放内存,shared_ptr 会在最后一个引用消失时自动释放
    return 0;
}

std::make_shared 与 std::make_unique 类似,但它还有一个额外的优势,即在分配内存时将引用计数分配在同一块内存中,从而减少了内存开销。std::make_shared 通常是推荐使用的方式,因为它可以提高性能,并在一些情况下减少内存使用。

总的来说,使用 std::make_unique 和 std::make_shared 能够简化动态分配内存和构造对象的过程,提高代码的安全性和可读性。

到此这篇关于C++ std::make_unique和std::make_shared用法小结的文章就介绍到这了,更多相关C++ std::make_unique和std::make_shared内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言new操作的安全性分析

    C语言new操作的安全性分析

    这篇文章主要介绍了C语言new操作的安全性分析,需要的朋友可以参考下
    2014-07-07
  • C++ opencv将图片动漫化介绍

    C++ opencv将图片动漫化介绍

    大家好,本篇文章主要讲的是C++ opencv将图片动漫化介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • C指针原理教程之Ncurses介绍

    C指针原理教程之Ncurses介绍

    Ncurses 提供字符终端处理库,包括面板和菜单。为了能够使用ncurses库,您必须在您的源程序中将curses.h包括(include)进来,而且在编译的需要与它连接起来. 在gcc中您可以使用参数-lcurses进行编译.
    2019-02-02
  • C++实现并优化异常系统

    C++实现并优化异常系统

    异常处理是C++的一项语言机制,用于在程序中处理异常事件,下面这篇文章主要给大家介绍了关于C++中异常的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • C++中function的实现原理详解

    C++中function的实现原理详解

    类模版std::function是一种通用、多态的函数封装。function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作。本文主要聊聊它的实现原理,需要的可以参考一下
    2022-12-12
  • C++中std::ifstream::readsome和std::ifstream::read的区别解析

    C++中std::ifstream::readsome和std::ifstream::read的区别解析

    ‌std::ifstream::readsome和std::ifstream::read‌的主要区别在于它们处理输入流的方式和可能返回的结果,下面给大家介绍C++中std::ifstream::readsome和std::ifstream::read的区别解析,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • 新旧MFC版本实现CEdit透明的2种方法的实例代码

    新旧MFC版本实现CEdit透明的2种方法的实例代码

    新旧MFC版本实现CEdit透明的2种方法的实例代码,需要的朋友可以参考一下
    2013-03-03
  • OpenCV 圆与矩形识别的方法

    OpenCV 圆与矩形识别的方法

    这篇文章主要介绍了OpenCV 圆与矩形识别的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 简单了解C语言中主线程退出对子线程的影响

    简单了解C语言中主线程退出对子线程的影响

    这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • C++进阶练习删除链表的倒数第N个结点详解

    C++进阶练习删除链表的倒数第N个结点详解

    这篇文章主要给大家介绍了关于如何利用C++删除链表的倒数第N个结点,文中通过实例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友可以参考下
    2022-05-05

最新评论