关于auto_ptr管理ownership的问题,和关于Handle Class设计的问题

flyr99 2004-10-10 02:27:15

#include <memory>
#include <iostream>

int main()
{
int b = 10;
int* a = &b;

std::auto_ptr< int > pa( a );

//delete a;

std::cout << *pa << "\n";

return 0;
}

程序如上, 当我把指针a传给auto_ptr对象后,编译器会发成内存错误(vs2003),错误信息:_BLOCK_TYPE_IS_VALID(pHead->nBockUse)也就是内存被拒绝访问,但程序回答出征学的结果10,当我delete a;后程序将不能打出任何结果.有没有人能解释一下为什么,跟ownership问题有什么关系.
我像在需要设计一个Handle Class,里面饱含另一个类的指针,如何设计才能阻止像这样的情况发生.也就是说告诉用户pass进去另一个类的指针是非法行为.更多内容参见Ruminations on C++(C++沉思录)第6,7章.欢迎大家讨论更多关于Handle Class设计的问题.
...全文
71 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
avalonBBS 2004-12-12
  • 打赏
  • 举报
回复
std::auto_ptr< int > pa( a );
//////////std::auto_ptr< int > pa(new int());
daylove 2004-10-10
  • 打赏
  • 举报
回复
看看 ……
hxblvc 2004-10-10
  • 打赏
  • 举报
回复
学习...
Jinhao 2004-10-10
  • 打赏
  • 举报
回复
传给auto_ptr的是一个栈对象的地址,这是禁止的,这种约定是程序员自觉遵守的,而不是通过语言的某些机制来检测

“里面饱含另一个类的指针”“也就是说告诉用户pass进去另一个类的指针是非法行为”,这两句是什么意思?没理解

64,654

社区成员

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

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