C++关于指针型句柄的赋值操作符,有些不明白的地方,新手求帮忙~

微波通信gogogo 2015-09-04 01:08:13
就是赋值操作符,比如

B& B::operator=(const B & rhs)
{
++rhs.use; //这个是把引用实参的计数+1了
decr_use(); //就是这一步???
p=rhs.p;
......
};

decr_use()是私有成员函数,定义为
if(--*use==0){dlete p;delete use;}

我就想说在赋值操作符的定义中,执行decr_use()不是将左操作数的计数减一嘛?不是可能提前删除p吗?

...全文
116 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ri_aje 2015-09-05
  • 打赏
  • 举报
回复
引用 2 楼 aichunzheng 的回复:
[quote=引用 1 楼 ri_aje 的回复:] decr_use 就是把自己当前管理的资源计数器减一,如果为零了,那么自己就是该资源最后的持有者,所以有责任把资源删除了,否则就泄漏了,完事了以后再把赋值操作符源对象的资源管理起来。 另外这程序写的有问题,如果 delete 异常了,rhs 的资源引用计数就错了。
谢谢您的回复,是我自己没弄清楚概念,delete是释放了自己原本指向的被控制住了的内存区域,use的计数计的是有多少个指向绑定对象内存的句柄指针。p指针自己还是存在着的,对后面p指针的赋值没有影响。还有您说的delete异常了是什么意思呢?[/quote] 就是 delete p; delete use; 有可能 throw,如果出现了,则后面的 p=rhs.p; 就执行不了了,但是此时 ++rhs.use; 已经加一了,所以引用计数就错了,因为新的管理者并没有出现。
微波通信gogogo 2015-09-04
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
decr_use 就是把自己当前管理的资源计数器减一,如果为零了,那么自己就是该资源最后的持有者,所以有责任把资源删除了,否则就泄漏了,完事了以后再把赋值操作符源对象的资源管理起来。 另外这程序写的有问题,如果 delete 异常了,rhs 的资源引用计数就错了。
谢谢您的回复,是我自己没弄清楚概念,delete是释放了自己原本指向的被控制住了的内存区域,use的计数计的是有多少个指向绑定对象内存的句柄指针。p指针自己还是存在着的,对后面p指针的赋值没有影响。还有您说的delete异常了是什么意思呢?
ri_aje 2015-09-04
  • 打赏
  • 举报
回复
decr_use 就是把自己当前管理的资源计数器减一,如果为零了,那么自己就是该资源最后的持有者,所以有责任把资源删除了,否则就泄漏了,完事了以后再把赋值操作符源对象的资源管理起来。 另外这程序写的有问题,如果 delete 异常了,rhs 的资源引用计数就错了。

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧