Dav*_*vid 4 c++ shared-ptr weak-ptr c++11
以下是weak_ptr的构造函数中的两个:http: //msdn.microsoft.com/en-us/library/bb982126.aspx
weak_ptr(const weak_ptr&);
template<class Other>
weak_ptr(const weak_ptr<Other>&);
Run Code Online (Sandbox Code Playgroud)
实际代码(来自memory):
weak_ptr(const weak_ptr& _Other)
{ // construct weak_ptr object for resource pointed to by _Other
this->_Resetw(_Other);
}
template<class _Ty2>
weak_ptr(const weak_ptr<_Ty2>& _Other,
typename enable_if<is_convertible<_Ty2 *, _Ty *>::value,
void *>::type * = 0)
{ // construct weak_ptr object for resource pointed to by _Other
this->_Resetw(_Other);
}
Run Code Online (Sandbox Code Playgroud)
Q1:为什么顶级拷贝构造函数就在那里?它看起来像每个案例的底部(包括前一个).它甚至被调用了吗?如果它们没有包含它,那么底部的它会占据它的位置吗?
Q2:底层(模板化)构造函数的第二个参数发生了什么.我想我理解SFINAE方面,但我不明白为什么有一个额外的*之后::type
Q1)如果你不编写复制构造函数,编译器会为你生成一个,这不是你想要的.模板化转换构造函数不计算在内.
Q2)记住,[抱歉,这不是你问的.]最终的参数类型只需要存在,但我们也不希望必须指定参数本身.构成一个我们也可以提供默认参数的类型的通用方法是指针.简而言之,我们需要使函数依赖于可能存在或不存在的类型,但实际上并不需要用户知道这一点.shared_ptr<T>就像a T*,必须在指针级别检查可转换性.如果T*可以转换为U*那么你应该能够将一个分配给另一个.想想指针到底座.
| 归档时间: |
|
| 查看次数: |
1447 次 |
| 最近记录: |