shared_ptr,unique_ptr和make_shared,make_unique
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不支持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端