实现简单版本的 auto_ptr 智能指针。我个人认为,这个 auto_ptr 千万不要使用,因为它的管理权转移法真的很不符合我们的预期。
ps:我给你拷贝我的东西,结果拷贝完,我的没有了?合适吗?但是还是理解实现一下这个历史包袱问题~~~
#include <iostream>
template <typename T>
class AutoPtr {
public:
AutoPtr(T* ptr = nullptr)
:_ptr(ptr)
{
ptr = nullptr;
}
AutoPtr(AutoPtr& ptr)
:_ptr(ptr._ptr) {
ptr._ptr = nullptr;
}
AutoPtr& operator=(AutoPtr& ptr) {
if (this == &ptr)
return *this;
if (_ptr != nullptr)
delete _ptr;
_ptr = ptr._ptr;
ptr._ptr = nullptr;
return *this;
}
T* operator->() {
return _ptr;
}
T& operator*() {
return *_ptr;
}
~AutoPtr() {
if (_ptr == nullptr)
return;
delete _ptr;
_ptr = nullptr;
}
private:
T* _ptr;
};
欢迎大家共同讨论,如有错误及时联系作者指出,并改正。谢谢大家!