[ Web Proxy ]
URL:
Viewing: https://cpppatterns.com [Back]  [Original]

C++ Patterns

Featured pattern: Weak reference

12345678910111213141516171819202122232425262728293031323334#include <memory> class bar; class foo { public: foo(const std::shared_ptr<bar>& b) : forward_reference{b} { } private: std::shared_ptr<bar> forward_reference; }; class bar { public: void set_back_reference(const std::weak_ptr<foo>& f) { this->back_reference = f; } void do_something() { std::shared_ptr<foo> shared_back_reference = this->back_reference.lock(); if (shared_back_reference) { // Use *shared_back_reference } } private: std::weak_ptr<foo> back_reference; };
Requires c++11 or newer

Intent

Maintain a non-owning reference to a shared dynamically allocated object to break circular dependencies.

Description

The std::weak_ptr type represents a non-owning reference to dynamically allocated object with shared ownership (std::shared_ptr). As they do not contribute to the reference count of the managed object they refer to, the object...

Continue reading

All patterns

Algorithms

Copy a range of elements

Requires c++11 or newer

Copy elements from a range to another range or container.

Count occurrences of value in a range

Requires c++98 or newer

Count the number of occurrences of a particular value in a range of elements.

Sort a range of elements

Requires c++11 or newer

Sort elements in a range into a given order.

Swap containers

Requires c++98 or newer

Swap the contents of two containers.

Swap values

Requires c++98 or newer

Swap the values of two objects.

Classes

Copy-and-swap

Requires c++11 or newer

Implement the assignment operator with strong exception safety.

Delegate behavior to derived classes

Requires c++98 or newer

Delegate behavior to derived classes without incurring the cost of run-time polymorphism.

Lexicographic ordering

Requires c++11 or newer

Implement a lexicographic ordering over class members.

Non-member non-friend interfaces

Requires c++98 or newer

Reduce dependencies on internal class details and improve encapsulation.

The PIMPL idiom

Requires c++11 or newer

Remove compilation dependencies on internal class implementations and improve compile times.

The rule of five

Requires c++11 or newer

Safely and efficiently implement RAII to encapsulate the management of dynamically allocated resources.

The rule of zero

Requires c++98 or newer

Utilise the value semantics of existing types to avoid having to implement custom copy and move operations.

Virtual constructor

Requires c++11 or newer

Create a copy of an object through a pointer to its base type.

Concurrency

Create a thread

Requires c++11 or newer

Execute code on a separate thread.

Execute a task asynchronously

Requires c++11 or newer

High-level asynchronous execution of tasks.

Pass values between threads

Requires c++11 or newer

Use promises to communicate values between threads.

Containers

Check existence of a key

Requires c++11 or newer

Check if a particular key is in an associative container.

Remove elements from a container

Requires c++11 or newer

Use the erase-remove idiom to remove elements from a container.

Functions

Apply tuple to a function

Requires c++14 or newer

Unpack a tuple as the arguments of a function.

Optional arguments

Requires c++17 or newer

Allow argument values to be omitted when calling a function.

Pass arrays

Requires c++11 or newer

Pass fixed-size arrays to and from functions.

Return multiple values

Requires c++11 or newer

Return multiple values of different types from a function.

Input streams

Read line-by-line

Requires c++98 or newer

Process the contents of an input stream line-by-line.

Read a line of values

Requires c++98 or newer

Read a sequence of delimited values from a single line of an input stream into a standard container.

Validate multiple reads

Requires c++98 or newer

Ensure that multiple stream reads are successful before using the extracted values.

Memory management

Shared ownership

Requires c++11 or newer

Share ownership of a dynamically allocated object with another unit of code.

Unique ownership

Requires c++11 or newer

Transfer unique ownership of a dynamically allocated object to another unit of code.

Use RAII types

Requires c++98 or newer

Avoid manual memory management to improve safety and reduce bugs and memory leaks.

Weak reference

Requires c++11 or newer

Maintain a non-owning reference to a shared dynamically allocated object to break circular dependencies.

Output streams

Overload operator
Web Proxy Viewer  |  New URL  |  Original Page