libcopp 2.3.1
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
default_smart_ptr_trait.h
Go to the documentation of this file.
1// Copyright 2025 owent
2// Licenses under the MIT License
3// @note This is a smart pointer class that is compatible with std::shared_ptr, but it is more lightweight and do not
4// use atomic operation for reference counting. It is designed for single thread usage.
5// @note We support all APIs of std::shared_ptr in C++14, and partly APIs of std::shared_ptr in C++17/20/26.
6
7#pragma once
8
11
12LIBCOPP_COPP_NAMESPACE_BEGIN
13namespace memory {
14
15#if LIBCOPP_MACRO_ENABLE_MULTI_THREAD
16using default_rc_ptr_trait = compat_strong_ptr_function_trait<compat_strong_ptr_mode::kStl>;
17#else
18using default_rc_ptr_trait = compat_strong_ptr_function_trait<compat_strong_ptr_mode::kStrongRc>;
19#endif
20
21template <class T>
22using default_strong_rc_ptr = typename default_rc_ptr_trait::template shared_ptr<T>;
23
24template <class T>
25using default_weak_rc_ptr = typename default_rc_ptr_trait::template weak_ptr<T>;
26
27template <class T>
28using default_enable_shared_from_this = typename default_rc_ptr_trait::template enable_shared_from_this<T>;
29
30template <class T, class... ArgsT>
32 return default_rc_ptr_trait::template make_shared<T>(std::forward<ArgsT>(args)...);
33}
34
35template <class T, class Alloc, class... TArgs>
37 return default_rc_ptr_trait::template allocate_shared<T>(alloc, std::forward<TArgs>(args)...);
38}
39
40template <class T, class F>
42 return default_rc_ptr_trait::template static_pointer_cast<T>(std::forward<F>(f));
43}
44
45template <class T, class F>
47 return default_rc_ptr_trait::template const_pointer_cast<T>(std::forward<F>(f));
48}
49
50#if defined(LIBCOPP_MACRO_ENABLE_RTTI) && LIBCOPP_MACRO_ENABLE_RTTI
51template <class T, class F>
52LIBCOPP_UTIL_FORCEINLINE default_strong_rc_ptr<T> default_dynamic_pointer_cast(F&& f) {
53 return default_rc_ptr_trait::template dynamic_pointer_cast<T>(std::forward<F>(f));
54}
55#endif
56
57} // namespace memory
58LIBCOPP_COPP_NAMESPACE_END
#define LIBCOPP_UTIL_FORCEINLINE
LIBCOPP_UTIL_FORCEINLINE default_strong_rc_ptr< T > default_allocate_strong(const Alloc &alloc, TArgs &&... args)
typename default_rc_ptr_trait::template weak_ptr< T > default_weak_rc_ptr
LIBCOPP_UTIL_FORCEINLINE default_strong_rc_ptr< T > default_static_pointer_cast(F &&f)
LIBCOPP_UTIL_FORCEINLINE default_strong_rc_ptr< T > default_make_strong(ArgsT &&... args)
LIBCOPP_UTIL_FORCEINLINE default_strong_rc_ptr< T > default_const_pointer_cast(F &&f)
typename default_rc_ptr_trait::template shared_ptr< T > default_strong_rc_ptr
compat_strong_ptr_function_trait< compat_strong_ptr_mode::kStrongRc > default_rc_ptr_trait
typename default_rc_ptr_trait::template enable_shared_from_this< T > default_enable_shared_from_this