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

 
 
 
日一二三四五六
       
       
       
       
       
       

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

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

本吧签到人数:0

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

  • 图片

  • 吧主推荐

  • 游戏

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

关于内存管理

  • 只看楼主
  • 收藏

  • 回复
  • Oo叮咚叮咚oO
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Foo *p = new Foo;
p->~Foo();
new (p) Foo(); // 原位置分配
p->~Foo(); // 和下面一句模拟delete
operator delete(p);
只是单纯地想问一下这个过程是否合法
如果合法是否不推荐
我对这个过程中发生的事情是否理解有误
至少编译器似乎对这段代码没有意见=_=


  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
well-formed & well-defined iff. Foo is complete object type
该用就用。


2025-06-22 15:13:57
广告
  • superdogbox
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
delete or free


  • silmerusse
  • ^
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
C++的话没有特别理由不推荐再用raw new/delete
用智能指针省很多事。
std::shared_ptr<Foo> p(new Foo()); //不用手动调用delete,引用为0时自动delete


  • 一只大水鱼
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
参考标准库的allocator的实现


  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
哦,漏了排除数组和抽象类。
over-aligned type是impl-def。
还有,如果自己提供了operator new/operator delete又没对上,可能抽风 。
最后,如果不光看这坨代码,只使用::operator new,之前有其它new满足被扩展合并调用::operator new的条件(也要求同时在之后使用delete),operator delete才一定UB
。
最后一点不适用于C++11及之前的实现。


  • lulu__zc
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
基于内存管理来说只是为了防止大量反复new和delete小对象导致出现太多内存碎片而使空间浪费.然而你这个删掉在原位置在new等于要大量管理很多不同类型大小的指针.感觉得不偿失.还不如做了个小对象内存分配的内存池.集体管理.大的对象就直接new和delete就好.


  • 幻の上帝
  • ->*
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我说的该用的地方嘛……
比如逗比libstdc++4.9没实现basic_ios以下的一大坨move operator=。所以就先~拆掉然后重新构造了。


2025-06-22 15:07:57
广告
  • yjryym
  • +
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
delete ptr; ptr = new CLSNAME;
像这种需要重新创建对象的写法可以优化成重新构造对象写法:
ptr->~CLSNAME; new(ptr)CLSNAME;
还有就是非new创建对象需要手动构造,非delete释放的对象需要手动析构。
别的情况下尽量不用。


  • 萧の十三郎
  • *
    14
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我只灌水不说话


登录百度账号

扫二维码下载贴吧客户端

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