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
}