summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Libraries/LibCore/ObjectPtr.h18
1 files changed, 17 insertions, 1 deletions
diff --git a/Libraries/LibCore/ObjectPtr.h b/Libraries/LibCore/ObjectPtr.h
index 98a4cd2bf0..ef41e509be 100644
--- a/Libraries/LibCore/ObjectPtr.h
+++ b/Libraries/LibCore/ObjectPtr.h
@@ -18,8 +18,20 @@ public:
}
~ObjectPtr()
{
+ clear();
+ }
+
+ void clear()
+ {
if (m_ptr && !m_ptr->parent())
delete m_ptr;
+ m_ptr = nullptr;
+ }
+
+ ObjectPtr& operator=(std::nullptr_t)
+ {
+ clear();
+ return *this;
}
template<typename U>
@@ -52,13 +64,17 @@ public:
ObjectPtr& operator=(const ObjectPtr& other)
{
- m_ptr = other.m_ptr;
+ if (this != &other) {
+ clear();
+ m_ptr = other.m_ptr;
+ }
return *this;
}
ObjectPtr& operator=(ObjectPtr&& other)
{
if (this != &other) {
+ clear();
m_ptr = exchange(other.m_ptr, nullptr);
}
return *this;