标签搜索

目 录CONTENT

文章目录

C++中各种智能指针的实现及弊端(三).md

小小城
2021-08-22 / 0 评论 / 0 点赞 / 4 阅读 / 827 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-05-02,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

C++中各种智能指针的实现及弊端(三)

@[toc]

一: std::unique_ptr

C++11中开始提供更靠谱的unique_ptr
std::unique_ptr文档

int main()
{
	unique_ptr<Date> up(new Date);
	// unique_ptr的设计思路非常的粗暴-防拷贝,也就是不让拷贝和赋值。
	unique_ptr<Date> copy(ap);
	return 0;
}

unique_ptr的实现原理:简单粗暴的防拷贝,下面简化模拟实现了一份UniquePtr来了解它的原理

// 模拟实现一份简答的UniquePtr,了解原理
template<class T>
class UniquePtr
{
public:
	UniquePtr(T * ptr = nullptr)
	: _ptr(ptr)
	{}
	~UniquePtr()
	{
		if(_ptr)
			delete _ptr;
	}
	T& operator*() {return *_ptr;}
	T* operator->() {return _ptr;}

private:
	//这里把成员函数设为私有的目的是防止用户自己在类外进行实现
	// C++98防拷贝的方式:只声明不实现+声明成私有
	UniquePtr(UniquePtr<T> const &);
	UniquePtr & operator=(UniquePtr<T> const &);
	// C++11防拷贝的方式:delete
	UniquePtr(UniquePtr<T> const &) = delete;
	UniquePtr & operator=(UniquePtr<T> const &) = delete;
private:
	T * _ptr;
};

二、std::unique_ptr的缺陷

  • 没有构造删除器,上面实现的只能释放new出来的空间,不能释放malloc出来的空间和文件流指针
0

评论区