diff --git a/include/dns_record.h b/include/dns_record.h index 30f75df..9d722ed 100644 --- a/include/dns_record.h +++ b/include/dns_record.h @@ -33,6 +33,7 @@ #include #include #include +#include "cxxstd.h" namespace Tins { class DNSRRImpl; @@ -97,6 +98,18 @@ public: */ DNSResourceRecord& operator=(const DNSResourceRecord &rhs); + #if TINS_IS_CXX11 + /** + * Move constructor. + */ + DNSResourceRecord(DNSResourceRecord &&rhs); + + /** + * Move assignment operator. + */ + DNSResourceRecord& operator=(DNSResourceRecord &&rhs); + #endif // TINS_IS_CXX11 + /** * \brief Destructor. * diff --git a/src/dns_record.cpp b/src/dns_record.cpp index 8533981..5e2e649 100644 --- a/src/dns_record.cpp +++ b/src/dns_record.cpp @@ -106,6 +106,22 @@ DNSResourceRecord& DNSResourceRecord::operator=(const DNSResourceRecord &rhs) return *this; } +#if TINS_IS_CXX11 + DNSResourceRecord::DNSResourceRecord(DNSResourceRecord &&rhs) + : info_(rhs.info_), data(std::move(rhs.data)), impl(0) { + std::swap(impl, rhs.impl); + } + + DNSResourceRecord& DNSResourceRecord::operator=(DNSResourceRecord &&rhs) { + info_ = rhs.info_; + data = std::move(rhs.data); + delete impl; + impl = 0; + std::swap(impl, rhs.impl); + return *this; + } +#endif + DNSResourceRecord::~DNSResourceRecord() { delete impl; }