Mark raii class as noexcept

This commit is contained in:
Kovid Goyal 2021-04-21 11:09:09 +05:30
parent 30a37bf583
commit 2324812b13
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -18,26 +18,26 @@ template<typename T, void free_T(void*), T null=reinterpret_cast<T>(NULL)>
class generic_raii { class generic_raii {
private: private:
T handle; T handle;
generic_raii( const generic_raii & ) ; generic_raii( const generic_raii & ) noexcept;
generic_raii & operator=( const generic_raii & ) ; generic_raii & operator=( const generic_raii & ) noexcept ;
public: public:
explicit generic_raii(T h = null) : handle(h) {} explicit generic_raii(T h = null) noexcept : handle(h) {}
~generic_raii() { release(); } ~generic_raii() noexcept { release(); }
void release() { void release() noexcept {
if (handle != null) { if (handle != null) {
free_T(handle); free_T(handle);
handle = null; handle = null;
} }
} }
T ptr() { return handle; } T ptr() noexcept { return handle; }
T detach() { T ans = handle; handle = null; return ans; } T detach() noexcept { T ans = handle; handle = null; return ans; }
void attach(T val) { release(); handle = val; } void attach(T val) noexcept { release(); handle = val; }
T* address() { return &handle; } T* address() noexcept { return &handle; }
explicit operator bool() const { return handle != null; } explicit operator bool() const noexcept { return handle != null; }
T* operator &() { return &handle; } T* operator &() noexcept { return &handle; }
}; };
typedef generic_raii<wchar_t*, PyMem_Free> wchar_raii; typedef generic_raii<wchar_t*, PyMem_Free> wchar_raii;