Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef UNIQUE_PTR_GUARD
- #define UNIQUE_PTR_GUARD
- #include <algorithm>
- namespace ptrs::unique {
- template <typename T>
- struct default_deleter {
- void operator()(T *ptr) {
- delete ptr;
- }
- };
- template <typename T, typename Deleter = struct default_deleter<T>>
- struct unique_ptr {
- private:
- T *ptr_on_object;
- Deleter my_deleter;
- void delete_data() {
- if (ptr_on_object != nullptr) {
- my_deleter(ptr_on_object);
- }
- }
- public:
- explicit unique_ptr(T *cur_ptr, const Deleter &tmp)
- : ptr_on_object(std::exchange(cur_ptr, nullptr)),
- my_deleter(tmp) { // solve problem with rvalue and lvalue Deleters
- }
- explicit unique_ptr(T *cur_ptr, Deleter &&tmp)
- : ptr_on_object(std::exchange(cur_ptr, nullptr)),
- my_deleter(std::move(tmp)) {
- }
- unique_ptr() : ptr_on_object(nullptr) {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement