C++ 为什么在auto_ptr中有模板复制构造函数和覆盖运算符功能?

C++ 为什么在auto_ptr中有模板复制构造函数和覆盖运算符功能?,c++,auto-ptr,C++,Auto Ptr,为什么在auto_ptr中有模板复制构造函数和覆盖运算符功能 ISO C++标准为AutoTypTR指定了以下接口。(这是直接从2003标准中复制的。) 名称空间std{ 模板结构auto_ptr_ref{}; 模板类自动检查{ 公众: 类型定义X元素类型; //20.4.5.1建造/复制/销毁: 显式自动_ptr(X*p=0)throw(); auto_ptr(auto_ptr&)throw(); 模板自动_ptr(auto_ptr&)throw(); auto_ptr&运算符=(auto_

为什么在auto_ptr中有模板复制构造函数和覆盖运算符功能

ISO C++标准为AutoTypTR指定了以下接口。(这是直接从2003标准中复制的。)

名称空间std{
模板结构auto_ptr_ref{};
模板类自动检查{
公众:
类型定义X元素类型;
//20.4.5.1建造/复制/销毁:
显式自动_ptr(X*p=0)throw();
auto_ptr(auto_ptr&)throw();
模板自动_ptr(auto_ptr&)throw();
auto_ptr&运算符=(auto_ptr&)throw();
模板auto_ptr&运算符=(auto_ptr&)throw();
auto_ptr&operator=(auto_ptr_ref r)throw();
~auto_ptr()throw();
//20.4.5.2成员:
X&运算符*()常量throw();
X*运算符->()常量throw();
X*get()常量throw();
X*释放()抛出();
无效重置(X*p=0)抛出();
//20.4.5.3转换:
auto_ptr(auto_ptr_ref)throw();
模板操作符auto_ptr_ref()throw();
模板操作符auto_ptr()throw();
};
为什么会有:

template<class Y> auto_ptr(auto_ptr<Y>&) throw();
template auto_ptr(auto_ptr&)throw();

我认为只要
auto_ptr(auto_ptr&)throw()
ok使用模板复制构造函数,我们就可以通过
派生的
来初始化
Base
类类型的
auto_ptr
auto_ptr
是完全不相关的类型

struct Base {};
struct Derived : Base {};

auto_ptr<Derived> d(new Derived);
auto_ptr<Base> b = d;
struct Base{};
派生结构:基{};
自动ptr d(新衍生);
自动_ptr b=d;

显然,这些方法使用(可能)不同的模板类型。您的版本仅适用于相同的模板类型。
struct Base {};
struct Derived : Base {};

auto_ptr<Derived> d(new Derived);
auto_ptr<Base> b = d;