Shared Pointer
A shared pointer is a "smart" pointer that retains ownership of an object by using reference counting across all smart pointers referencing that object.
It is similar to the std::shared_ptr class introduced in C++11. However, this is not a compatible implementation, as there are no weak pointers, no make_shared, no custom deleters, and so on.
Usage: SharedPtr<Class> ptr(new Class())
When ptr is passed around by a value, the copy constructor and destructor manage the reference count of the raw pointer. If the counter reaches zero, delete is called on the raw pointer.
SharedPtr class reference
| Public Member Functions | |
| constexpr | SharedPtr () | 
| Create empty SharedPtr not pointing to anything.  More... | |
| constexpr | SharedPtr (std::nullptr_t) | 
| Create empty SharedPtr not pointing to anything.  More... | |
| SharedPtr (T *ptr) | |
| Create new SharedPtr.  More... | |
| ~SharedPtr () | |
| Destructor.  More... | |
| SharedPtr (const SharedPtr &source) | |
| Copy constructor.  More... | |
| SharedPtr (SharedPtr &&source) | |
| Move constructor.  More... | |
| SharedPtr | operator= (const SharedPtr &source) | 
| Copy assignment operator.  More... | |
| SharedPtr | operator= (SharedPtr &&source) | 
| Move assignment operator.  More... | |
| void | reset (T *ptr) | 
| Replaces the managed pointer with a new unmanaged pointer.  More... | |
| void | reset () | 
| Replace the managed pointer with a null pointer.  More... | |
| T * | get () const | 
| Raw pointer accessor.  More... | |
| uint32_t | use_count () const | 
| Reference count accessor.  More... | |
| T & | operator* () const | 
| Dereference object operator.  More... | |
| T * | operator-> () const | 
| Dereference object member operator.  More... | |
| operator bool () const | |
| Boolean conversion operator.  More... | |
Shared pointer example
/*
 * Copyright (c) 2006-2020 Arm Limited and affiliates.
 * SPDX-License-Identifier: Apache-2.0
 */
#include "platform/SharedPtr.h"
int main(void)
{
    struct MyStruct {
        int a;
    };
    // Create shared pointer
    SharedPtr<MyStruct> ptr(new MyStruct);
    // Increase reference count
    SharedPtr<MyStruct> ptr2(ptr);
    ptr = nullptr; // Reference to the struct instance is still held by ptr2
    ptr2 = nullptr; // The raw pointer is freed
}