diff --git a/AK/NonnullOwnPtr.h b/AK/NonnullOwnPtr.h index 6e3f3b59639..cd4a8624609 100644 --- a/AK/NonnullOwnPtr.h +++ b/AK/NonnullOwnPtr.h @@ -154,8 +154,7 @@ inline NonnullOwnPtr adopt_own(T& object) #endif template -inline NonnullOwnPtr -make(Args&&... args) +inline NonnullOwnPtr make(Args&&... args) { return NonnullOwnPtr(NonnullOwnPtr::Adopt, *new T(forward(args)...)); } diff --git a/AK/NonnullRefPtr.h b/AK/NonnullRefPtr.h index 27d9c06a564..22936a2dfc4 100644 --- a/AK/NonnullRefPtr.h +++ b/AK/NonnullRefPtr.h @@ -335,6 +335,12 @@ inline void swap(NonnullRefPtr& a, NonnullRefPtr& b) a.swap(b); } +template +inline NonnullRefPtr create(Args&&... args) +{ + return NonnullRefPtr(NonnullRefPtr::Adopt, *new T(forward(args)...)); +} + } template @@ -346,4 +352,5 @@ struct Traits> : public GenericTraits> { }; using AK::adopt_ref; +using AK::create; using AK::NonnullRefPtr; diff --git a/AK/OwnPtr.h b/AK/OwnPtr.h index 8708f79a24d..3eb42d1c360 100644 --- a/AK/OwnPtr.h +++ b/AK/OwnPtr.h @@ -206,6 +206,12 @@ inline OwnPtr adopt_own_if_nonnull(T* object) return {}; } +template +inline OwnPtr try_make(Args&&... args) +{ + return adopt_own_if_nonnull(new (nothrow) T(forward(args)...)); +} + template struct Traits> : public GenericTraits> { using PeekType = T*; @@ -218,3 +224,4 @@ struct Traits> : public GenericTraits> { using AK::adopt_own_if_nonnull; using AK::OwnPtr; +using AK::try_make; diff --git a/AK/RefPtr.h b/AK/RefPtr.h index b8063b17a10..7e8e6b573e9 100644 --- a/AK/RefPtr.h +++ b/AK/RefPtr.h @@ -485,8 +485,15 @@ inline RefPtr adopt_ref_if_nonnull(T* object) return {}; } +template +inline RefPtr try_create(Args&&... args) +{ + return adopt_ref_if_nonnull(new (nothrow) T(forward(args)...)); +} + } using AK::adopt_ref_if_nonnull; using AK::RefPtr; using AK::static_ptr_cast; +using AK::try_create;