diff --git a/Libraries/LibCore/AddressInfoVector.cpp b/Libraries/LibCore/AddressInfoVector.cpp index 54b7f017f2..6d26217313 100644 --- a/Libraries/LibCore/AddressInfoVector.cpp +++ b/Libraries/LibCore/AddressInfoVector.cpp @@ -18,16 +18,26 @@ namespace Core::System { AddressInfoVector::AddressInfoVector(Vector addresses, struct addrinfo* ptr) : m_addresses(move(addresses)) - , m_ptr(adopt_own_if_nonnull(ptr)) + , m_ptr(ptr) { } -AddressInfoVector::~AddressInfoVector() = default; - -void AddressInfoVector::AddrInfoDeleter::operator()(struct addrinfo* ptr) +AddressInfoVector::AddressInfoVector(AddressInfoVector&& other) + : m_addresses(move(other.m_addresses)) + , m_ptr(exchange(other.m_ptr, nullptr)) { - if (ptr) - ::freeaddrinfo(ptr); +} + +AddressInfoVector::~AddressInfoVector() +{ + if (m_ptr) + ::freeaddrinfo(m_ptr); +} + +void AddressInfoVector::swap(AddressInfoVector& other) +{ + AK::swap(m_addresses, other.m_addresses); + AK::swap(m_ptr, other.m_ptr); } } diff --git a/Libraries/LibCore/AddressInfoVector.h b/Libraries/LibCore/AddressInfoVector.h index 9e61dd16e3..0525bcfacb 100644 --- a/Libraries/LibCore/AddressInfoVector.h +++ b/Libraries/LibCore/AddressInfoVector.h @@ -7,7 +7,7 @@ #pragma once #include -#include +#include #include struct addrinfo; @@ -16,21 +16,26 @@ namespace Core::System { class AddressInfoVector { AK_MAKE_NONCOPYABLE(AddressInfoVector); - AK_MAKE_DEFAULT_MOVABLE(AddressInfoVector); public: AddressInfoVector(Vector addresses, struct addrinfo* ptr); + AddressInfoVector(AddressInfoVector&& other); ~AddressInfoVector(); + AddressInfoVector& operator=(AddressInfoVector&& other) + { + AddressInfoVector temporary { move(other) }; + swap(temporary); + return *this; + } + ReadonlySpan addresses() const { return m_addresses; } private: - struct AddrInfoDeleter { - void operator()(struct addrinfo*); - }; + void swap(AddressInfoVector& other); Vector m_addresses; - OwnPtr m_ptr; + struct addrinfo* m_ptr { nullptr }; }; }