mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-22 15:20:15 +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).
|
// not move them).
|
||||||
#ifdef __AUDACITY_OLD_STD__
|
#ifdef __AUDACITY_OLD_STD__
|
||||||
template<typename T> using movable_ptr = std::shared_ptr<T>;
|
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
|
#else
|
||||||
template<typename T> using movable_ptr = std::unique_ptr<T>;
|
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
|
#endif
|
||||||
|
|
||||||
template<typename T, typename... Args>
|
template<typename T, typename... Args>
|
||||||
@ -568,4 +570,30 @@ inline movable_ptr<T> make_movable(Args&&... args)
|
|||||||
<T>(std::forward<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__
|
#endif // __AUDACITY_MEMORY_X_H__
|
||||||
|
Loading…
x
Reference in New Issue
Block a user