auto_ptr的构造函数:auto_ptr(T *ptr = 0) ?该如何解决

auto_ptr的构造函数:auto_ptr(T *ptr = 0) ???
关于auto_ptr
auto_ptr的构造函数有如下三个:
1)   explicit   auto_ptr(T   *ptr   =   0)   throw(   );
2)     auto_ptr(const   auto_ptr   &ob)   throw(   );
3)     template   <class   T2>   auto_ptr(const   auto_ptr <T2>   &ob)   throw(   );

现在的问题是:

第一个问题:
对于第一个构造函数,explicit是什么意思?   Explicit   auto_ptr(T*   ptr=0)   throw();   这里为什么要让ptr=0呢?

第二个问题:
第二个构造函数,不理解其中的const
为什么在括号里写成const   auto_ptr   &ob呢?  
我只见过  
function(type   a)   const   //表示本函数不修改类变量

function(const   type   a)     这里的const又是什么意思?

第三个问题:
最后,请大家给我介绍auto_ptr这个类好吗


------解决方案--------------------
第一个问题:
对于第一个构造函数,explicit是什么意思? Explicit auto_ptr(T* ptr=0) throw(); 这里为什么要让ptr=0呢?
============================================
防止隐式转换
比如void fun(auto_ptr at);
你传一个T *ptr, fun(ptr)时
非explicit的构造函数会被编译器隐式执行,构造一个tmp对象,传给fun
explicit声明了,fun(ptr)时会报编译时错的
------解决方案--------------------
(1)explicit禁止隐式转换,形参中的“=”表示默认参数;
(2)const引用,你虽然通过引用传数,却不能修改那个参数;
(3)查查手册或MSDN吧。
另外,前两个问题都是语法基础,楼主应多看看书哦。
------解决方案--------------------
第二个构造函数,不理解其中的const
=================
防止函数内部修改ob,因为你传的引用,在函数修改会改变外部的值
比如int fun(int &a){int b = a; a = 3; return b;}
使用时 fun(t);执行之后t的值就变成3了
int fun(const int &a){int b = a; a = 3; return b;}//err a = 3会报编译错
------解决方案--------------------
第三个问题:
最后,请大家给我介绍auto_ptr这个类好吗
===================
指针的封装,
把堆内存的释放放在析构函数,对象结束时候,堆内存的自动的释放
而且执行深copy
------解决方案--------------------
你看的还是VC6这个烂东西里的auto_ptr吧,那是错误实现
现在的应该是
explicit auto_ptr(_Tp* __px = 0) _STLP_NOTHROW
template <class _Tp1> auto_ptr(auto_ptr <_Tp1> & __r) _STLP_NOTHROW
template <class _Tp1> auto_ptr <_Tp> & operator=(auto_ptr <_Tp1> & __r) _STLP_NOTHROW
具体可看More Effective C++附录:9.2 一个auto_ptr的实现实例。
------解决方案--------------------
不是变成0,是默认参数,当你不提供时,实参按0处理。
------解决方案--------------------
空指针可以赋给任何类型的指针。
------解决方案--------------------
对指针变量来讲,“0”就是空指针。
------解决方案--------------------
“付成0,那类型岂不无法匹配”
跟你说了多少遍了,这个不是赋值,是默认参数,你怎么就咬紧牙关,不肯相信呢,唉。
------解决方案--------------------
C++ Primer,函数的默认参数那一章节,补课去。
------解决方案--------------------
第一个问题:
对于第一个构造函数,explicit是什么意思? Explicit auto_ptr(T* ptr=0) throw(); 这里为什么要让ptr=0呢?
答:explicit是为了避免将此构造函数用作转换操作;ptr=0是缺省参数,即用户没有给出参数的时候仍然可以执行此constructor。

第二个问题:
第二个构造函数,不理解其中的const
为什么在括号里写成const auto_ptr &ob呢?
我只见过
function(type a) const //表示本函数不修改类变量

function(const type a) 这里的const又是什么意思?
答:这个const说明ob引用的auto_ptr不可以被改变。至于function(const type a) ,它与function(type a)是一样的,而且最好写成function(type a),除非你要刻意强调什么东西。

第三个问题:
最后,请大家给我介绍auto_ptr这个类好吗
答:auto_ptr是一种“智能指针”,它主要用来帮助更好地管理资源。