1

我阅读了 STL 中的 unique_ptr 实现并有一些问题。的代码unique_ptr::swap()如下:

void
swap(unique_ptr& __u)
{
    using std::swap;
    swap(_M_t, __u._M_t);
}

我对该函数有两个问题:

  1. unique_ptr::_M_t是私有成员,为什么可以__u._M_t访问?

  2. 为什么没有指定模板参数unique_ptr& __u?这是由特定的 unique_ptr 的构造函数完成的吗?

谢谢你的帮助!

4

1 回答 1

3
  1. 该函数是一个成员。允许访问任何实例的私有成员。

  2. 如果它在类主体中定义,则不需要模板参数。编译器假定与模板实例化的参数相同。如果您想引用不同的模板实例化,则需要参数,例如,如果代码出于unique_ptr<int>某种原因需要引用unique_ptr<double>,则需要显式。

于 2013-09-06T03:34:45.143 回答