c++ primer智能指针问题

Damn_boy 2012-07-02 08:23:43
里面说 计数器不能直接放在HasPtr中。
为什么?
那段解释我没看明白:


int obj;
HasPtr p1(&obj,42);
HasPtr p2(p1);
HasPtr p3(p1);


如果引用计数保存在HasPtr中 创建p3时如何更新?
可在p1中增加引用计数,然后复制到p3。
但如何更新p2?

这段啥意思 不理解
...全文
117 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2012-07-03
  • 打赏
  • 举报
回复
如果在HasPtr里面直接存放引用计数的话 那么
int obj;
HasPtr p1(&obj,42);
HasPtr p2(p1);
HasPtr p3(p1);
这段代码之后 p2的引用计数是2 而p1和p3的引用计数是3.
Damn_boy 2012-07-03
  • 打赏
  • 举报
回复
引用计数成员变量
不是每个对象内部独立的一个成员
而是同一个类类型的的实例所共享的一个计数器
所以不可以把引用计数放在HasPtr内部
long referenceCount; //illegal 

除非将该引用计数设为static成员
这样可以达到共享的目的。
static long referenceCount;

但多线程的时候则需要处理同步的问题。

或者将该引用计数设为一个计数器指针。
这样也能达到共享计数器的目的
long *referenceCount


Java内部所有的对象都派生自Object对象
在Object内部有一个共享的引用计数变量。
cpp则没有该实现。

一般的引用计数实现 都将引用计数独立成一个类来实现
非完美主义者 2012-07-02
  • 打赏
  • 举报
回复
啥意思?
HasPtr是个类吗?
引用计数是计什么?

64,282

社区成员

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

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