关于boost::shared_ptr增加引用计数据问题

avisnet 2008-10-09 10:40:43
我有个函数接受一个boost::shared_ptr类型的参数,我想保留shared_ptr引用的指针,该怎么做?

class X
{
public:
~X() { delete p; }
void fn(boost::shared_ptr<int> i)
{
p = i.get(); // 这儿应该增加i的引用计数
// 因为i中的指针我是放在析构函数中删除的.
// 该怎么增加i的引用计数?
}
private:
int* p;
};

void method()
{
boost::shared_ptr<int> i(new int(10));
X x;
x.fn(i);
}
...全文
157 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
DarknessTM 2008-10-09
  • 打赏
  • 举报
回复
get() 是不增加计数的! 增加计数是在 拷贝函数,或者=操作时
DarknessTM 2008-10-09
  • 打赏
  • 举报
回复
既然使用了智能指针,那么其他存放这个指针的地方也全部使用啊

成员变量不是 单纯的 T* 而应该是 boost::shared_ptr<T>
yshuise 2008-10-09
  • 打赏
  • 举报
回复
//封装成模板
template <typename T>
class X
{
public:
X(T* m):p(m){}//这样更简洁
private:
boost::shared_ptr<T> p;

};

使用:
X a(new T);
//不需要释放
yshuise 2008-10-09
  • 打赏
  • 举报
回复


class X
{
public:
X(int* m):p(m){}//这样更简洁
private:
boost::shared_ptr<int> p;

};
yshuise 2008-10-09
  • 打赏
  • 举报
回复
楼主你的用法很怪异,一般的用法应该是这样的:
class X
{
public:
X(boost::shared_ptr<int> m):p(m){}
//然后用p做任何你想做的事情。
private:
boost::shared_ptr<int> p;
};

65,185

社区成员

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

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