Fix ObjectBase's move constructor not setting handle to nullptr

This caused a crash because if handle was set to garbage then the
move-constructor would try to call the Release function on it.
This commit is contained in:
Corentin Wallez 2017-05-29 15:27:28 -04:00 committed by Corentin Wallez
parent b2b495b5aa
commit a0a9f633ce
1 changed files with 3 additions and 5 deletions

View File

@ -58,8 +58,7 @@ namespace nxt {
template<typename Derived, typename CType> template<typename Derived, typename CType>
class ObjectBase { class ObjectBase {
public: public:
ObjectBase(): handle(nullptr) { ObjectBase() = default;
}
ObjectBase(CType handle): handle(handle) { ObjectBase(CType handle): handle(handle) {
if (handle) Derived::NxtReference(handle); if (handle) Derived::NxtReference(handle);
} }
@ -71,14 +70,13 @@ namespace nxt {
Derived& operator=(ObjectBase const& other) = delete; Derived& operator=(ObjectBase const& other) = delete;
ObjectBase(ObjectBase&& other) { ObjectBase(ObjectBase&& other) {
Derived::NxtRelease(handle);
handle = other.handle; handle = other.handle;
other.handle = 0; other.handle = 0;
} }
Derived& operator=(ObjectBase&& other) { Derived& operator=(ObjectBase&& other) {
if (&other == this) return static_cast<Derived&>(*this); if (&other == this) return static_cast<Derived&>(*this);
Derived::NxtRelease(handle); if (handle) Derived::NxtRelease(handle);
handle = other.handle; handle = other.handle;
other.handle = 0; other.handle = 0;
@ -106,7 +104,7 @@ namespace nxt {
} }
protected: protected:
CType handle; CType handle = nullptr;
}; };
{% macro render_cpp_method_declaration(type, method) %} {% macro render_cpp_method_declaration(type, method) %}