boost 智能指针一个小小的问题

cxb23 2012-01-31 03:07:44
要是代码这样写:

int * p;
{
boost::shared_ptr<int> a(new int(10));
p = a.get();
}
*p = 11;//请问这样还有用吗?智能指针a已经离开它的生存期,我分析了a.get代码实现,仅仅是return了这个int的地址,并没做引用计数之类的保护,那最后这一句还是合法吗?会不会中括号之内智能指针已经内部delete了这个int?
...全文
102 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxb23 2012-02-01
  • 打赏
  • 举报
回复
好,谢谢以上各位的说明,这让我对它的适用范围有了更多了解。
ZongShengLee 2012-01-31
  • 打赏
  • 举报
回复

std::shared_ptr<int> p;
{
std::shared_ptr<int> q(new int(5));
p = q;
}
int i = *p;


这样就没问题了
morebread 2012-01-31
  • 打赏
  • 举报
回复
是啊,智能指针自己都已经过了生命期了,那肯定要把自己管理的内存都给释放掉啊。
不然你还想要怎么样?
RLib 2012-01-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cxb23 的回复:]

引用 2 楼 rrrfff 的回复:

出了块之后就自动析构了


那这样说智能指针也不算很智能啊
[/Quote]

智能指针只是帮助你管理指针(如防止忘记delete),如果它自己挂了(被析构),那还怎么智能呢?
cxb23 2012-01-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rrrfff 的回复:]

出了块之后就自动析构了
[/Quote]

那这样说智能指针也不算很智能啊
RLib 2012-01-31
  • 打赏
  • 举报
回复
出了块之后就自动析构了
RLib 2012-01-31
  • 打赏
  • 举报
回复
是的,*p = 11;这样是非法的

64,654

社区成员

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

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