关于auto_ptr管理ownership的问题,和关于Handle Class设计的问题
#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设计的问题.