本文介绍了为什么超负荷的unique_ptr复位(指针p =指针())和reset(nullptr_t)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Accroding到,
无效复位(PTR指针指针=());模板<类U>
无效复位(U)=删除;无效复位(的std :: nullptr_t P);
Now that reset(nullptr)
is equivalent to reset(pointer())
, why does the latter exist?
If I want to reset an array form unique_ptr, why can I not just use rest(pointer())
?
解决方案
The
template< class U >
void reset( U ) = delete;
would be chosen for a call with nullptr
argument, if not for
void reset( std::nullptr_t p );
That's why it exists, to allow the call with nullptr
.
Example (compile with FIX
defined to suppress the compilation error):
#include <cstddef> // std::nullptr_t
struct S
{
void reset( char* ) {}
template< class Type >
void reset( Type ) = delete;
#if FIX
void reset( std::nullptr_t ) {}
#endif
};
auto main() -> int
{
S().reset( nullptr ); // Fails when FIX is not defined.
}
这篇关于为什么超负荷的unique_ptr复位(指针p =指针())和reset(nullptr_t)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!