网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月02日漏签0天
c++吧 关注:626,976贴子:2,112,775
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 12回复贴,共1页
<<返回c++吧
>0< 加载中...

我该如何使用智能指针替换 new?

  • 只看楼主
  • 收藏

  • 回复
  • 雨花抬老汉
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我看到好多 C++ 的文章将 new 要和 delete 配对用,否则要用智能指针。这里我想把 pArr 的 new 换成 shared_ptr ,我应该怎么写?

是用 shared_ptr<int> 还是 shared_ptr<int*> ?传入的参数还是代表数组名的普通指针,应该怎么复制数组的值?返回值类型要不要换?
求教


  • ThegiantMaster
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
网上有例子,百度就行


2025-08-02 00:37:56
广告
不感兴趣
开通SVIP免广告
  • aaaaaaa421
  • *
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
https://stackoverflow.com/a/13062069 ,但这里似乎用 unique_ptr 更适合。


  • 贴吧用户_Q5DNPG6
  • =
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
建议换 std::vector


  • 雨花抬老汉
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一个通宵搞好了。看样子是 C++17 的新功能作福了。谢谢几位老哥


  • 寒水暗霜
  • ==
    10
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
最好使用make_shared和make_unique去创建智能指针,另外尽可能使用unique_ptr而不是shared_ptr


  • o規則之上o
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
make_unique


  • Waaaaf
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
考虑使用std::unique_ptr管理专属所有权资源,并优先选用std::make_unique


2025-08-02 00:31:56
广告
不感兴趣
开通SVIP免广告
  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
分配器都没上,直接make_unique。复制么就手动,要么抄一个。
namespace ystdex
{
template<typename _type>
inline _type*
clone_monomorphic(const _type& v)
{
return new _type(v);
}
template<typename _tPointer>
inline auto
clone_monomorphic_ptr(const _tPointer& p)
-> decltype(ystdex::clone_monomorphic(*p))
{
using ptr_t = decltype(ystdex::clone_monomorphic(*p));
return p ? ystdex::clone_monomorphic(*p) : ptr_t();
}
}
嫌没事干也可以WG21抄个polymorphic_value/indirect_value。
更没事干塞any里。
应该不会遇到一时傻了allocate_unique+pmr::polymorphic_allocator然后因为多态类随机炸翔一整天的。


  • 水中羽月亦澄明
  • <<
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
智能指针是在所有标准库容器都无法满足你的需要,万不得已、万般无奈之下的选择。
智能指针的设计初衷是在你没有选择的情况下依然不需要裸new,而不是在std::vector<int>就在那里放着的情况下你却视若无睹。
在我之前已经有不止一个吧友跟你提到std::vector,甚至还有吧务。那么我再给你提一遍。在标准库容器可以满足你的需要的前提下,不要冷落人家。
标准库对于C++是至关重要的。在标准库还没有了解的情况下,应当积极地学习标准库,而不是用手写的代码碰瓷标准库
比如说,标准库<algorithm>中有std::sort()函数,你却非要自己写一个排序算法。std::sort()使用并发快排,你却使用古老的冒泡排序。你有多大的把握认为你写的比标准库写得还强?如果没有,就老老实实地去使用标准库。
标准库凝聚着世界顶尖C++程序员的四十年的心血,却免费送给你用,一分钱都不用掏。要是国内出的,都不可能低于1000人民币。好东西免费送给你,你还是不用。标准库有那么恶心吗?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 12回复贴,共1页
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示