有区别,我在MSDN中查了auto_ptr class,auto_ptr()是默认构造函数,auto_ptr(T *p=0)应该是一个模板的构造函数,且此构造函数是有参数的,此处*p=0就是其默认参数,如果你直接写auto_ptr()来构造一个对象的话,相当于调用了auto_ptr(T *p=0),这里将一个指针参数赋值为0有一个好处,就是防止delete p 时产生非法访问,delete一个0指针是合法的。关于模板和构造函数详细内容可以看《Thinking in c++ Volume Two》,里面 讲得很好。