g ++的shared_ptr别名构造函数的原型:
template<typename _Yp>
shared_ptr(const shared_ptr<_Yp>& __r, element_type* __p) noexcept
: __shared_ptr<_Tp>(__r, __p) { }
给出的例子是:
shared_ptr< pair<int,int> > pii(new pair<int,int>());
shared_ptr<int> pi(pii, &pii->first);
有效;一直有效。但是看一下原型,_Yp是我们提供的用于实例化模板的模板参数,因此上面的最后一行感觉它应该应该读取:
shared_ptr<pair> pi(pii, &pii->first);
但是,示例肯定是正确的。那我们该如何解释呢?我今天第一次看了原型,我试图理解如何解释它。感谢您的意见/解释。