AK: Mark smart pointer classes as [[nodiscard]]

This makes it an error to not do something with a returned smart
pointer, which should help prevent mistakes. In cases where you do need
to ignore the value, casting to void will placate the compiler.

I did have to add comments to disable clang-format on a couple of lines,
where it wanted to format the code like this:

```c++
private : NonnullRefPtr() = delete;
```
This commit is contained in:
Sam Atkins 2021-12-01 21:05:13 +00:00 committed by Andreas Kling
parent 3ca2aee054
commit 5013a6480d
Notes: sideshowbarker 2024-07-17 23:08:34 +09:00
5 changed files with 8 additions and 5 deletions

View File

@ -25,7 +25,7 @@ template<typename T>
class WeakPtr;
template<typename T>
class NonnullOwnPtr {
class [[nodiscard]] NonnullOwnPtr {
public:
using ElementType = T;

View File

@ -39,7 +39,7 @@ ALWAYS_INLINE void unref_if_not_null(T* ptr)
}
template<typename T>
class NonnullRefPtr {
class [[nodiscard]] NonnullRefPtr {
template<typename U, typename P>
friend class RefPtr;
template<typename U>
@ -218,8 +218,11 @@ public:
AK::swap(m_ptr, other.m_ptr);
}
// clang-format off
private:
NonnullRefPtr() = delete;
// clang-format on
ALWAYS_INLINE RETURNS_NONNULL T* as_nonnull_ptr() const
{
VERIFY(m_ptr);

View File

@ -15,7 +15,7 @@
namespace AK {
template<typename T>
class OwnPtr {
class [[nodiscard]] OwnPtr {
public:
OwnPtr() = default;

View File

@ -27,7 +27,7 @@ template<typename T>
class OwnPtr;
template<typename T, typename PtrTraits>
class RefPtr {
class [[nodiscard]] RefPtr {
template<typename U, typename P>
friend class RefPtr;
template<typename U>

View File

@ -15,7 +15,7 @@
namespace AK {
template<typename T>
class WeakPtr {
class [[nodiscard]] WeakPtr {
template<typename U>
friend class Weakable;