mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-22 07:10:06 +02:00
Define movable_ptr_with_deleter
This commit is contained in:
parent
d9588dda9b
commit
b7f91e5674
@ -552,8 +552,10 @@ static char*THIS_FILE = __FILE__;
|
||||
// not move them).
|
||||
#ifdef __AUDACITY_OLD_STD__
|
||||
template<typename T> using movable_ptr = std::shared_ptr<T>;
|
||||
template<typename T, typename Deleter> using movable_ptr_with_deleter_base = std::shared_ptr<T>;
|
||||
#else
|
||||
template<typename T> using movable_ptr = std::unique_ptr<T>;
|
||||
template<typename T, typename Deleter> using movable_ptr_with_deleter_base = std::unique_ptr<T, Deleter>;
|
||||
#endif
|
||||
|
||||
template<typename T, typename... Args>
|
||||
@ -568,4 +570,30 @@ inline movable_ptr<T> make_movable(Args&&... args)
|
||||
<T>(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
template<typename T, typename Deleter> class movable_ptr_with_deleter
|
||||
: public movable_ptr_with_deleter_base < T, Deleter >
|
||||
{
|
||||
public:
|
||||
// Do not expose a constructor that takes only a pointer without deleter
|
||||
// That is important when implemented with shared_ptr
|
||||
movable_ptr_with_deleter() {};
|
||||
movable_ptr_with_deleter(T* p, const Deleter &d)
|
||||
: movable_ptr_with_deleter_base<T, Deleter>( p, d ) {}
|
||||
movable_ptr_with_deleter &operator= (movable_ptr_with_deleter&& that)
|
||||
{
|
||||
if (this != &that) {
|
||||
((movable_ptr_with_deleter_base<T, Deleter>&)(*this)) =
|
||||
std::move(that);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T, typename Deleter, typename... Args>
|
||||
inline movable_ptr_with_deleter<T, Deleter>
|
||||
make_movable_with_deleter(const Deleter &d, Args&&... args)
|
||||
{
|
||||
return movable_ptr_with_deleter(safenew T(std::forward<Args>(args...)), d);
|
||||
}
|
||||
|
||||
#endif // __AUDACITY_MEMORY_X_H__
|
||||
|
Loading…
x
Reference in New Issue
Block a user