mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 07:30:19 +00:00
AK: Convert the try_make<T> factory function to use ErrorOr
This allows more ergonomic memory allocation failure related error checking using the TRY macro.
This commit is contained in:
parent
ba0a2a3e2f
commit
18b98f8c28
Notes:
sideshowbarker
2024-07-17 19:49:30 +09:00
Author: https://github.com/IdanHo Commit: https://github.com/SerenityOS/serenity/commit/18b98f8c289 Pull-request: https://github.com/SerenityOS/serenity/pull/12275
2 changed files with 8 additions and 7 deletions
|
@ -215,17 +215,17 @@ inline ErrorOr<NonnullOwnPtr<T>> adopt_nonnull_own_or_enomem(T* object)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, class... Args>
|
template<typename T, class... Args>
|
||||||
requires(IsConstructible<T, Args...>) inline OwnPtr<T> try_make(Args&&... args)
|
requires(IsConstructible<T, Args...>) inline ErrorOr<NonnullOwnPtr<T>> try_make(Args&&... args)
|
||||||
{
|
{
|
||||||
return adopt_own_if_nonnull(new (nothrow) T(forward<Args>(args)...));
|
return adopt_nonnull_own_or_enomem(new (nothrow) T(forward<Args>(args)...));
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Remove once P0960R3 is available in Clang.
|
// FIXME: Remove once P0960R3 is available in Clang.
|
||||||
template<typename T, class... Args>
|
template<typename T, class... Args>
|
||||||
inline OwnPtr<T> try_make(Args&&... args)
|
inline ErrorOr<NonnullOwnPtr<T>> try_make(Args&&... args)
|
||||||
|
|
||||||
{
|
{
|
||||||
return adopt_own_if_nonnull(new (nothrow) T { forward<Args>(args)... });
|
return adopt_nonnull_own_or_enomem(new (nothrow) T { forward<Args>(args)... });
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
|
@ -33,13 +33,14 @@ There is a `make<T>()` helper that constructs a new object and returns it wrappe
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The `try_make<T>()` helper attempts to construct a new object wrapped in an `OwnPtr`. All arguments passed to it are forwarded to `T`'s constructor. In case of allocation failure, a null pointer is returned. This allows the calling code to handle allocation failure as it wishes.
|
The `try_make<T>()` helper attempts to construct a new object wrapped in an `ErrorOr<NonnullOwnPtr<T>>`. All arguments passed to it are forwarded to `T`'s constructor. In case of allocation failure, an ENOMEM error is returned. This allows the calling code to handle allocation failure as it wishes.
|
||||||
|
|
||||||
```cpp
|
```cpp
|
||||||
OwnPtr<Foo> my_object = try_make<Foo>();
|
auto my_object_or_error = try_make<Foo>();
|
||||||
if (!my_object) {
|
if (my_object_or_error.is_error()) {
|
||||||
// handle allocation failure...
|
// handle allocation failure...
|
||||||
}
|
}
|
||||||
|
auto my_object = my_object_or_error.release_value();
|
||||||
my_object->do_stuff();
|
my_object->do_stuff();
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue