本文介绍了为什么超负荷的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)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-23 20:00