29 template <
typename _Tp>
35 template <
typename _Tp>
41 template <
typename _Tp,
size_t _Bound>
44 struct __invalid_type { };
48 template <
typename _Tp,
typename... _Args>
51 return unique_ptr<_Tp>(
new _Tp(std::forward<_Args>(__args)...));
55 template <
typename _Tp>
62 template <
typename _Tp,
typename... _Args>
63 inline typename _MakeUnique<_Tp>::__invalid_type
make_unique(_Args &&...) =
delete;
103 template <
typename U>
106 template <
typename U>
135 p.m_ref_count =
nullptr;
144 p.m_ref_count =
nullptr;
149 inline T*
get()
const noexcept {
return m_ptr; }
174 template <
typename T,
typename... Args>
180 template <
typename T,
typename U>
183 T* ptr =
static_cast<T*
>(p.get());
187 template <
typename T,
typename U>
190 T* ptr =
const_cast<T*
>(p.get());
194 template <
typename T,
typename U>
197 T* ptr =
dynamic_cast<T*
>(p.get());
201 template <
typename T,
typename U>
204 T* ptr =
reinterpret_cast<T*
>(p.get());
212 template <
typename T>
220 template <
typename T>
223 return std::make_shared<T>(*source);
226 template <
typename T>
229 return std::make_shared<T>(*source);
233 #endif // TTKSMARTPTR_H
unique_ptr< _Tp > __single_object
std::shared_ptr< T > makeCopy(const std::shared_ptr< T > &source)
TTKSharedPtr(const TTKSharedPtr &p) noexcept
TTKSharedPtr(T *ptr) noexcept
typename remove_extent< _Tp >::type remove_extent_t
Alias template for remove_extent.
T & operator*() const noexcept
TTKSharedPtr & operator=(const TTKSharedPtr &p) noexcept
TTKSharedPtr(TTKSharedPtr &&p) noexcept
unique_ptr< _Tp[]> __array
TTKSharedPtr< T > make_shared(Args &&...args)
TTKSharedPtr & operator=(TTKSharedPtr &&p) noexcept
std::atomic< int > m_count
_MakeUnique< _Tp >::__single_object make_unique(_Args &&...__args)
std::make_unique for single objects
TTKSharedPtr< T > const_pointer_cast(const TTKSharedPtr< U > &p) noexcept
TTKSharedPtr< T > reinterpret_pointer_cast(const TTKSharedPtr< U > &p) noexcept
T * operator->() const noexcept
TTKSharedPtr< T > dynamic_pointer_cast(const TTKSharedPtr< U > &p) noexcept
_SharedCount * m_ref_count
The namespace of the application object.
TTKSharedPtr< T > static_pointer_cast(const TTKSharedPtr< U > &p) noexcept
TTKSharedPtr(const TTKSharedPtr< U > &p, T *ptr) noexcept