首页 > 其他分享 >shared_ptr,unique_ptr和make_shared,make_unique

shared_ptr,unique_ptr和make_shared,make_unique

时间:2023-04-28 15:34:27浏览次数:25  
标签:std widget make new shared unique ptr

std::shared_ptr<widget> p(new widget());

auto p=std::make_shared<int>(widget);

 

两者的不同:

1.使用make_shared的时候widget只写了一次,

2.当遇到函数传参时,由于编译器执行顺序的不同,如果使用shared_ptr这种方式,当new widget之后,后面的参数函数执行然后出现异常导致程序退出,此时就会出现内存泄漏。

比如:

int func(std::shared<widget>(new widget),compute())

可以分开
std::shared<widget> p(new widget);
int func(p,compute());//这样就不会存在内存泄漏,但是第一种,是一个右值,第二种是一个左值,使用的拷贝构造,引用计数会加一是一个原子操作。代价会变高,可以使用move=来变为右值降低代价
int func(std::move(p),compute());

 

使用make_shared则不会出现这样的情况。

 

但是shared_ptr支持自定义析构,而make_shared不支持

标签:std,widget,make,new,shared,unique,ptr
From: https://www.cnblogs.com/hailanben/p/17362324.html

相关文章

  • CLion远程调试CMake项目
    cmake项目的远程调试。CLion安装在本地Windows系统,cmake项目部署在远程的Linux系统。配置远程调试可以比较方便地进行Linux端的cmake项目开发。点击setting。主要配置这三个:Toolchains点击+号,添加RemoteHost。然后先点击Credentials的设置按钮,添加远程连接。配置SSHCon......
  • Makefile 只修改了.h头文件,编译为什么不起作用?
    M,-MM,-MMD,-MF,-MT区别https://programmer.group/gcc-m-mm-mmd-mf-mt.htmlRef加-MMD选项解决头文件编译生效https://cloud.tencent.com/developer/article/1837814gcc预处理选项https://gcc.gnu.org/onlinedocs/gcc/Preprocessor-Options.html......
  • 关于sap-hana-数据库-在pacemaker集群中迁移主控节点-master节点
    环境介绍,hana数据库的两个节点:azphxxxdb01azphxxxdb02目前master位于azphxxxdb02,现在需要切换回azphxxxdb01 需要确保Pacemaker没有任何失败的操作(通过pcs状态检查)、没有任何意外的位置约束(例如迁移测试的遗留内容),并且HANA处于同步状态,例如,使用systemReplicationStat......
  • PHP8编译安装报错make: *** [ext/fileinfo/libmagic/apprentice.lo] Error 1
    make:***[ext/fileinfo/libmagic/apprentice.lo]错误1 解决:当配置PHP时出现make:***[ext/fileinfo/libmagic/apprentice.lo]Error1时是因为服务器内存不足1G只需要在配置命令中添加--disable-fileinfo即可......
  • How do I make a delicious lemon cheesecake?
    Therearemanydifferentwaystoprepareadeliciouslemoncheesecake.Hereisonepopularrecipethatyoucantry:Ingredients:21/4cupsgrahamcrackercrumbs(about150crackers)3tablespoonssugar8ozcreamcheese,softened1cupgranulatedsugar1......
  • cmake包含单独.hpp文件
    myproject/├──CMakeLists.txt├──main.cpp└──include└──hello.hpp#OpenCVfind_package(OpenCVREQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})#Eigenfind_package(Eigen3REQUIRED)include_directories(${EIGEN3_INCLUDE_DIR})include_dire......
  • GLIBCXX_3.4.20 not found 问题解决【Unable to load shared library 'lib**.so'】
    前因:问题:在调用别人的so时,出现了如下问题【GLIBCXX_3.4.20notfound】Unabletoloadsharedlibrary'libdbc.so'oroneofitsdependencies.Inordertohelpdiagnoseloadingproblems,considersettingtheLD_DEBUGenvironmentvariable:/lib64/libstdc++.so.6:v......
  • makefile 通用模板
    ##Makefile##⭐全速编译命令:makeclean&&make-j$(nproc)#:=就地解析赋值=最后一次赋值?=未赋值时赋值+=接续赋值#mount-tnfs-onolock,vers=3192.168.5.12:/home/book/nfs_rootfs/mnt&&ps-ef|grepjc|grep-vgrep|awk'{print$1}'|xa......
  • A. Make it Beautiful - 构造 + 数学
    题意:给定一个单调递增的数组,是否能通过任意调整顺序使对任意一个元素a[i]满足a[i]!=a[1]+a[2]+a[3]+...+a[i-1],如果能,输出“YES”并输出修改后的数组;如果不能输出“NO”。分析:如果数组元素都相等则一定不能满足条件,由于数组单调递增,所以只需要把a[1]后面的元素从大到小......
  • spring 依赖注入用@Autowired报错 No unique bean of type
    1,报错如下Causedby:org.springframework.beans.factory.NoSuchBeanDefinitionException:Nouniquebeanoftype[org.springframework.amqp.rabbit.core.RabbitTemplate]isdefined:expectedsinglematchingbeanbutfound4:[jmsTemplate1,jmsTemplate2,jmsTemplate3......