AK: Ensure we never use OwnPtr<> with RefCounted types

This commit is contained in:
Sergey Bugaev 2020-06-12 16:30:30 +03:00 committed by Andreas Kling
parent 62d1ac63e8
commit 0466810638
Notes: sideshowbarker 2024-07-19 05:42:21 +09:00
3 changed files with 15 additions and 1 deletions

View File

@ -28,6 +28,7 @@
#include <AK/Assertions.h>
#include <AK/LogStream.h>
#include <AK/RefCounted.h>
#include <AK/StdLibExtras.h>
#include <AK/Traits.h>
#include <AK/Types.h>
@ -51,6 +52,7 @@ public:
NonnullOwnPtr(AdoptTag, T& ptr)
: m_ptr(&ptr)
{
static_assert(!is_ref_counted((const T*)nullptr), "Use RefPtr<> for RefCounted types");
}
NonnullOwnPtr(NonnullOwnPtr&& other)
: m_ptr(other.leak_ptr())

View File

@ -27,16 +27,18 @@
#pragma once
#include <AK/NonnullOwnPtr.h>
#include <AK/RefCounted.h>
namespace AK {
template<typename T>
class OwnPtr {
public:
OwnPtr() {}
OwnPtr() { }
explicit OwnPtr(T* ptr)
: m_ptr(ptr)
{
static_assert(!is_ref_counted((const T*)nullptr), "Use RefPtr<> for RefCounted types");
}
OwnPtr(OwnPtr&& other)
: m_ptr(other.leak_ptr())

View File

@ -100,6 +100,16 @@ public:
}
};
static constexpr bool is_ref_counted(const RefCountedBase*)
{
return true;
}
static constexpr bool is_ref_counted(...)
{
return false;
}
}
using AK::RefCounted;