Flow
Documentation for the Flow C++ Library
Loading...
Searching...
No Matches
flow::DebugClass Class Reference

Debug class to track copy/move operations. Some operations may be optimized away in release builds. More...

#include <flow_debug_memory.h>

Public Member Functions

 DebugClass ()
 DebugClass (const DebugClass &rhs)
 DebugClass (DebugClass &&rhs) noexcept
 ~DebugClass ()
DebugClassoperator= (const DebugClass &rhs)
DebugClassoperator= (DebugClass &&rhs) noexcept

Private Attributes

std::shared_ptr< std::size_t > copyCounter_
std::size_t copies_
std::size_t id_

Static Private Attributes

static std::size_t globalId = 0

Friends

std::ostream & operator<< (std::ostream &out, const DebugClass &obj)

Detailed Description

Debug class to track copy/move operations. Some operations may be optimized away in release builds.

Definition at line 23 of file flow_debug_memory.h.

Constructor & Destructor Documentation

◆ DebugClass() [1/3]

flow::DebugClass::DebugClass ( )
inline

Definition at line 29 of file flow_debug_memory.h.

30 : copyCounter_(std::make_shared<std::size_t>(0)),
31 copies_(0),
32 id_(globalId++) {
33 std::cout << std::format("default_ctor id {}, copies {}\n", id_, copies_);
34 }
static std::size_t globalId
std::shared_ptr< std::size_t > copyCounter_

References copies_, copyCounter_, globalId, and id_.

Referenced by DebugClass(), DebugClass(), operator<<, operator=(), and operator=().

◆ DebugClass() [2/3]

flow::DebugClass::DebugClass ( const DebugClass & rhs)
inline

Definition at line 36 of file flow_debug_memory.h.

37 : copyCounter_(rhs.copyCounter_),
39 id_(rhs.id_) {
40
41 std::cout << std::format("copy_ctor id {}, copies {}\n", id_, copies_);
42 }

References copies_, copyCounter_, DebugClass(), and id_.

◆ DebugClass() [3/3]

flow::DebugClass::DebugClass ( DebugClass && rhs)
inlinenoexcept

Definition at line 44 of file flow_debug_memory.h.

45 : copyCounter_(std::move(rhs.copyCounter_)),
46 copies_(rhs.copies_),
47 id_(rhs.id_) {
48 std::cout << std::format("move_ctor id {}, copies {}\n", id_, copies_);
49 }

References copies_, DebugClass(), and id_.

◆ ~DebugClass()

flow::DebugClass::~DebugClass ( )
inline

Definition at line 51 of file flow_debug_memory.h.

51 {
52 std::cout << std::format("dtor id {}, copies {}\n", id_, copies_);
53 }

References copies_, and id_.

Member Function Documentation

◆ operator=() [1/2]

DebugClass & flow::DebugClass::operator= ( const DebugClass & rhs)
inline

Definition at line 55 of file flow_debug_memory.h.

55 {
56 copyCounter_ = rhs.copyCounter_;
57 copies_ = ++(*copyCounter_);
58 id_ = rhs.id_;
59 std::cout << std::format("copy_op id {}, copies {}\n", id_, copies_);
60 }

References copies_, copyCounter_, DebugClass(), and id_.

◆ operator=() [2/2]

DebugClass & flow::DebugClass::operator= ( DebugClass && rhs)
inlinenoexcept

Definition at line 62 of file flow_debug_memory.h.

62 {
63 copyCounter_ = std::move(rhs.copyCounter_);
64 copies_ = rhs.copies_;
65 id_ = rhs.id_;
66 std::cout << std::format("move_op id {}, copies {}\n", id_, copies_);
67 }

References copies_, copyCounter_, DebugClass(), and id_.

◆ operator<<

std::ostream & operator<< ( std::ostream & out,
const DebugClass & obj )
friend

Definition at line 72 of file flow_debug_memory.h.

72 {
73 out << std::format("{{id: {}, copies: {}}}", obj.id_, obj.copies_);
74 return out;
75 }

References copies_, DebugClass(), and id_.

Member Data Documentation

◆ copies_

std::size_t flow::DebugClass::copies_
private

◆ copyCounter_

std::shared_ptr<std::size_t> flow::DebugClass::copyCounter_
private

Definition at line 24 of file flow_debug_memory.h.

Referenced by DebugClass(), DebugClass(), operator=(), and operator=().

◆ globalId

std::size_t flow::DebugClass::globalId = 0
inlinestaticprivate

Definition at line 70 of file flow_debug_memory.h.

Referenced by DebugClass().

◆ id_

std::size_t flow::DebugClass::id_
private

The documentation for this class was generated from the following file: