42 template <
typename... Args>
43 explicit CopiedSharedPtr(Args&&... args) noexcept :
44 m_WidgetPtr{std::make_shared<WidgetType>(std::forward<Args>(args)...)}
48 CopiedSharedPtr(
const CopiedSharedPtr& other) noexcept :
49 m_WidgetPtr{std::make_shared<WidgetType>(*other.m_WidgetPtr)}
53 CopiedSharedPtr(CopiedSharedPtr&& other) noexcept :
54 m_WidgetPtr{std::move(other.m_WidgetPtr)}
58 CopiedSharedPtr& operator=(
const CopiedSharedPtr& other)
noexcept
61 m_WidgetPtr = std::make_shared<WidgetType>(*other.m_WidgetPtr);
66 CopiedSharedPtr& operator=(CopiedSharedPtr&& other)
noexcept
69 m_WidgetPtr = std::move(other.m_WidgetPtr);
74 explicit operator bool()
const noexcept
76 return m_WidgetPtr !=
nullptr;
79 WidgetType& operator*()
const noexcept
84 WidgetType* operator->()
const noexcept
86 return m_WidgetPtr.get();
89 [[nodiscard]] WidgetType* get()
const noexcept
91 return m_WidgetPtr.get();
95 std::shared_ptr<WidgetType> m_WidgetPtr;