gpt4 book ai didi

c++ - weak_ptr 奇怪的复制构造函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:20:38 25 4
gpt4 key购买 nike

以下是 weak_ptr 的 2 个构造函数: http://msdn.microsoft.com/en-us/library/bb982126.aspx

weak_ptr(const weak_ptr&);

template<class Other>
weak_ptr(const weak_ptr<Other>&);

实际代码(来自内存):

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);
}

Q1:为什么顶层拷贝构造函数也在那里?看起来底部的一个解释了所有情况(包括顶部的一个)。它甚至会被调用吗?如果他们不包括它,底部的会取代它吗?

Q2:底部(模板化)构造函数的第二个参数发生了什么。我想我了解 SFINAE 方面,但我不明白为什么在 ::type

之后有一个额外的 *

最佳答案

Q1) 如果你不写拷贝构造函数,编译器会为你生成一个,这不是你想要的。模板化转换构造函数不算在内。

Q2) 记住shared_ptr<T>就像一个 T* , 必须在指针级别检查可转换性。如果T*可转换为 U*那么你应该能够将一个分配给另一个。想想指向基的指针。 [抱歉,这不是你问的。] final 参数类型只需要存在,但我们也不想必须指定参数本身。构造我们还可以为其提供默认参数的类型的一种通用方法是指针。简而言之,我们需要使函数依赖于可能存在或可能不存在的类型,但实际上不需要用户知道这一点。

关于c++ - weak_ptr 奇怪的复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7034300/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com