unique_ptr 是一种独占所有权的智能指针,即同一时间只能有一个 unique_ptr 指向某个对象。当 unique_ptr 被销毁时(例如超出作用域或被重置),它所指向的对象也会被自动删除。这种特性使得 unique_ptr 非常适用于管理在堆上动态分配的单个对象。二、设计自定义的unique_ptr类 在实现自定义的 unique_ptr 之前,...
不可复制:unique_ptr 不能被复制,只能通过移动语义转移所有权。 使用限制:在某些需要共享所有权的场景下,unique_ptr 不适用。 适用场景: 局部作用域内的动态内存管理:在函数内部使用 unique_ptr 管理动态分配的对象,确保对象在函数退出时自动释放。 防止资源泄露:在需要确保资源在不再需要时能够被及时释放的场景下...
在实现上,unique_ptr使用了独占所有权的原则,即同一时间只能有一个unique_ptr指向同一个对象。 1.删除器的管理 unique_ptr的删除器是通过模板参数来指定的,它定义了unique_ptr在销毁资源时应该执行的操作。可以使用默认删除器(使用delete操作)或者自定义删除器。在实现上,unique_ptr使用一个指向删除器函数的指针来...
5.实现unique_ptr 5.1 参数打包 使用完美转发,来保证传入参数的左值和右值的不变 template<classT,class...Args>UniquePtr<T>makeUnique(Args&&...args){returnUniquePtr<T>(newT(std::forward<Args>(args)...));} 5.2 删除器 DefaultDeleter 结构体,这是一个默认删除器,用于释放 UniquePtr 持有的资源。
B站C++流媒体一面:weak_ptr如何实现的?如何使用weak_ptr? 码农Mark 1364 10 小米C++二面:说一下类成员初始化顺序? 码农Mark 2238 17 学c++怎么样才能开始做项目啊! 大笨东o 538 0 拼多多C++一面:内存泄露相关面试题,什么是内存泄露?列举检测内存泄露的方案 码农Mark 1528 13 析构函数中delete this会...
C++ 之实现自己的 unique_ptr 1. 几个基本成员函数的作用: u.reset() 释放u指向的对象 u.reset(q) 如果提供了内置指针q,就令u指向这个对象 u.reset(nullptr) 将 u 置为空 u.release() u 放弃对指针的控制权,返回指针,并将 u 置为空 2. 一些规则: 某个时刻只能有一个unique_ptr 指向一个给定的...
unique_ptr对象在它们本身被销毁时,或者一旦它们的值通过赋值操作或显式调用unique_ptr::reset而改变,就会自动删除它们所管理的对象(使用删除器)。 unique_ptr对象唯一地拥有其指针:任何其他工具都不应负责删除该对象,因此任何其他托管指针都不应指向其托管对象,因为一旦它们必须这样做,unique_ptr对象就会删除其托管对象...
关于源码阅读的技巧参考前边几篇文章,这里不再赘述。 《状态机思维辅助源码阅读》 《shared_ptr源码分析与调试》 《weak_ptr源码分析与调试》看完了shared_ptr,weak_ptr的代码之后,再看unique_ptr就简单多了。…
默认析构器中使用delete运算符实现对象的析构template<typename_Tp,typename_Dp=default_delete<_Tp>>...
unique_ptr不可拷贝,但是可以移动。这是它的重要特征,因此,绝对不能忘记自定义移动构造函数和移动赋值运算符。 而重新实现移动赋值运算符时,要记得考虑自赋值问题。上述代码考虑了该问题。 优化:使用swap函数来实现operator=(移动赋值运算符),巧妙解决自赋值问题。且相比判断*this == p而言,提高了效率。