首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MSVC std::unique_ptr 源码解析

介绍 std::unique_ptr 是 c++ 11 添加的智能指针之一,是裸指针的封装,我们可以直接使用裸指针来构造 std::unique_ptr: struct TestStruct {...[]> p2 = std::make_unique(3); std::unique_ptr 重载了 operator->,你可以像使用普通指针一样使用它: std::unique_ptr...在实际编程实践中,std::unique_ptr 要比 std::shared_ptr 更实用,因为 std::unique_ptr 对对象的所有权是明确的,销毁时机也是明确的,可以很好地避免使用 new..._Myval2); } 这使得我们可以像使用普通指针一样使用 std::unique_ptr。...总结 std::unique_ptr 有两个定义,分别针对普通类型和数组类型 std::unique_ptr 第二个模板参数是删除器,不传递的情况下使用的是 default_delete std::unique_ptr

1.6K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    vector初始化方法_vector初始化大小

    vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分 ,为了使用vector 我们必须包含相关的头文件 : #include vector...> 使用vector有两种不同的形式,即所谓的数组习惯和 STL习惯。...定义一个已知长度的 vector : vector ivec( 10 ); //类似数组定义int ia[ 10 ]; 可以通过ivec[索引号] 来访问元素 使用 if ( ivec.empty...2. vector的元素被初始化为与其类型相关的缺省值:算术和指针类型的缺省值是 0,对于class 类型,缺省值可通过调用这类的缺省构造函数获得,我们还可以为每个元素提供一个显式的初始值来完成初始化,...,例如 : int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 }; 我们不能用同样的方法显式地初始化 vector ,但是可以将 vector 初始化为一个已有数组的全部或一部分

    2.2K30

    动态数组和C++ std::vector详解

    (文章后面有详细的介绍) 正确的使用reserve能够避免减少不必要的分配,例如在向vector添加元素之前提前知道元素的大致数量,使用reserve,可以提前合理分配好存储空间,避免在vector增长阶段不必要的内存分配和复制...具体用法示例如下: std::vector c1(3, 100); //初始化c1,此时c1 = {100, 100, 100} auto it = c1.begin(); it = c1....初始化新元素为 value 的副本。...3} // 初始化一个长度为4,所有元素值都为2的vector vector w (4, 2) // w = {2, 2, 2, 2} // 深拷贝,以v初始化vector对象b vector...使用shrink_to_fit()降低内存 从vector中擦除元素不会改变其容量,因此未存放的元素的位置对应内存不会被释放,如果后续不需要再使用这些空闲的内存,可以使用shrink_to_fit()对该内存进行释放

    64010

    探究C++11智能指针之std::unique_ptr

    unique_ptr指针指向的堆内存空间的引用计数为 1,如果unique_ptr 指针放弃对所指堆内存空间的所有权,那么该空间会被立即释放回收。 那么,什么时候使用unique_ptr呢?...简单来说:可以考虑将动态分配的有唯一所有者的资源保存在unique_ptr的实例中。 如何初始化一个std::unique_ptr对象?...(num); return 0; } std::unique_ptr与std::move不解之缘 std::unique_ptr无法被复制,但可以使用移动构造将std::unique_ptr对象持有的堆内存转移给另外一个对象...= new Func; /////可能抛出异常 delete pFunc; return 0; } 此时使用std::unique_ptr来管理动态内存,只要std::unique_ptr...return 0; } 容器内保存指针示例: std::vectorstd::unique_ptr> vec; std::unique_ptr sp(std::make_unique

    2.3K10

    从 C++ STD::VECTOR的RESIZE和RESERVE看VECTOR的源码实现

    与size()已经初始化的空间 1. vector 特点 是连续空间 啥意思 提前已经分配好内存了(M_start,_M_end_of_storage)。就能解释下吗2个概念。...capacity:已经分配的空间(用户不可见),---相当于 malloc 没有调用构造函数 size 代表 已经分配空间,已经初始化,---new 调用构造函数进行初始化。...可分配空间是vector之外的 思考60秒:vector(10,0) 执行过程 vector(10,0) 执行过程 a 执行_Vector_base构造函数 b 初始化size(10),调用对应构造函数...//表示目前使用空间的 头 _Tp* _M_finish; //表示目前使用空间的 尾 _Tp* _M_end_of_storage; //表示目前使用空间 可用空间。...在构造时候已经预先分配 size_type capacity() const { return size_type(_M_end_of_storage - begin()); } std

    1.6K10

    C++ 中 std::array<int, array_size> 与 std::vector<int> 的深入对比

    std::vector 动态内存分配:std::vector 使用动态内存分配,可以根据需要动态调整其大小。...初始化方式多样:std::vector 支持多种初始化方式,如直接指定大小、使用初始化列表等。...功能 std::array std::vector 动态调整大小 ❌ ✅ 插入元素 ❌ ✅ 删除元素 ❌ ✅ 初始化方式 固定大小 多种方式 四、使用场景 std::array 固定大小数据:适用于数据大小在编译时已知且不会改变的场景...例如: std::vector vec(5); // 创建一个包含 5 个元素的 vector,元素默认初始化为 0 std::vector vec = {1, 2, 3, 4, 5...}; // 使用初始化列表 总结 std::array 和 std::vector 在 C++ 中各有其适用场景。

    10710

    vector>初始化_电脑初始化出现问题

    1、默认初始化,vector为空,size为0,未开辟空间,可通过push_back()添加元素。...vector v; v.push_back(10); 2、默认初始化,指定vector大小,元素初始值默认为0,元素增多时,同样可以通过push_back()来改变vector大小以增加元素。...vector v(5) 3、指定初始化元素值为2 vector v(5,2); 4、指定初始化元素值 vector v = {1,2,3,4,5} 5、用已存在的vector...初始化新的vector vector v(5,2); vector v_copy(v); 6、vectorvector>的初始化 vectorvector>:...说到底也还是一个vector,所以跟vector的初始化一样,第一个值表示大小,第二个表示元素值,只不过不同的是vectorvector>的元素值也是一个vector(同理也可以使用push_back

    46540
    领券