为什么 C++ 不能确定我打算创建一个unique_ptr<A>
用这个语法? (a 之前已被声明为unique_ptr<A>
)
a = unique_ptr(new A());
必须包括在内似乎非常多余<A>
。这适用于我使用的大多数函数模板,为什么 unique_ptr 不适用呢?
EDIT:C++ 现在支持 make_unique,没有冗余。
std::unique_ptr
is a class模板,而不是function模板。参数扣除仅发生在function模板,不class模板。
一个常用的技巧是编写一个函数模板来创建实例化类模板类型的对象,例如:
template <typename T>
std::unique_ptr<T> make_unique_ptr(T* ptr)
{
return std::unique_ptr<T>(ptr);
}
For std::unique_ptr
,不过,我会避免这样做:std::unique_ptr
object 应直接获取动态分配的对象的所有权,因此不需要这样做。您的代码应该写成:
std::unique_ptr<A> a(new A());
or, if a
已经存在,调用reset()
可以使用:
a.reset(new A());
至于为什么类型推导不适用于实例化类模板,请考虑以下示例:
template <typename T>
struct X
{
template <typename U> X(U) { }
};
没有办法T
可以从构造函数的调用中推断出来。即使在“更简单”的情况下,存在带有类型参数的构造函数T
,由于构造函数可以重载,因此仍然可能出现问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)