深刻理解一个原理的方法之一就是去自我实现一个,上代码:
1 自定义unique_ptr
#include <iostream>
#include <utility>
template<typename T>
class unique_ptr {
private:
T * ptr_resource = nullptr;
public:
explicit unique_ptr(T* raw_resource) noexcept : ptr_resource(std::move(raw_resource)) {}
unique_ptr(std::nullptr_t) : ptr_resource(nullptr) {}
unique_ptr() noexcept : ptr_resource(nullptr) {}
~unique_ptr() noexcept {
delete ptr_resource;
}
unique_ptr(const unique_ptr<T>&) noexcept = delete;
unique_ptr& operator = (const unique_ptr&) noexcept = delete;
public:
unique_ptr(unique_ptr&& move) noexcept {
std::cout << "construct for unique_ptr&&" << std::endl;
move.swap(*this);
}
unique_ptr& operator=(unique_ptr&& move) noexcept {
std::cout << "operator= for unique_ptr&&" &l