//方式一auto Array_1=make_unique<int[]>(10);//方式二std::unique_ptr<int[]>Array_2(newint[10]);//类型+[],表示初始化指向数组的智能指针//后面的具体用法和数组类似Array_1[0]=1;Array_2[0]=2; 注意,初始化weak_ptr需要用到shared_ptr。 代码样例: 代码语言:javascript 复制 auto sh_p=ma...
for (int i = 0; i < size; i++) { (*arr)[i] = 0;} } 这样,每次需要创建动态数组时,只需调用initArray函数,传入数组的大小和指向数组指针的指针即可。最后,别忘了在程序结束前释放动态分配的内存,以避免内存泄漏。释放内存的代码可以放在程序的清理部分或使用智能指针管理内存。
2) 在构建 shared_ptr 智能指针,也可以明确其指向。例如: 由此,我们就成功构建了一个 shared_ptr 智能指针,其指向一块存有 10 这个 int 类型数据的堆内存空间。 同时,C++11 标准中还提供了 std::make_shared 模板函数,其可以用于初始化 shared_ptr 智能指针,例如: 以上2 种方式创建的 p3 是完全相同。 3)...
//动态分配一个新对象,初始化值为39 引用计数为1,因为只有当前使用shared_ptr<int>ptr1=make_shared<int>(39);longusecount=ptr1.use_count();//计算当前有多少指针在共享对象cout<<usecount<<endl;//动态分配一个新对象,初始化值为1 引用计数为1shared_ptr<int>ptr2=make_shared<int>(1);//ptr2指向...
shared_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指向的对象。标准库还定义了一个名为weak_ptr的伴随类,它是一种弱引用,指向shared_ptr所管理的对象。这三种类型都定义在memory头文件中。 make_shared的标准库函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr。与智能指针一样,ma...
1,unique_ptr的数组智能指针,没有*和->操作,但支持下标操作[] 2,shared_ptr的数组智能指针,有*和->操作,但不支持下标操作[],只能通过get()去访问数组的元素。 3,shared_ptr的数组智能指针,必须要自定义deleter 小例子 #include<iostream>#include<memory>#include<vector>using namespacestd;classtest{public:...
C 语言只有值的传递,无法直接传递引用,要想传递引用必须通过指针间接实现。 如果C 语言没有指针,一切都通过值传递,参数将永远只有输入参数,所有的结构体只要参与运算都具有极高的开销,因为每传递进函数参数一次就必须全体复制一次。 另外一点:C语言无法在参数中传递数组,一切数组在函数参数传递时退化为指针,因此如果没...
C++ 中并没有直接提供静态链表数据结构,所以在 C++ 中一般是通过 C 语言中的结构体数组来模拟静态链表。在 C 中,静态链表对应的结构体数组大小是固定的,它们都是静态分配的,所以在程序运行期间不支持对静态链表的大小进行动态调整。2. 动态链表的区别:在 C++ 中,我们通常使用 new/delete 或者智能指针(如 ...
3.在容器内保存指针 intmain() { vector<unique_ptr<int>>vec; unique_ptr<int> uptr(newint(10)); vec.push_back(std::move(uptr));return0; } 4.管理动态数组 intmain() { unique_ptr<int[]> uptr(newint[5]{1,2,3,4,5});
1) 静态内存分配是在编译时完成的,不占用CPU资源;动态分配内存运行时完成,分配与释放需要占用CPU资源; 2)静态内存分配是在栈上分配的,动态内存是堆上分配的; 3)动态内存分配需要指针或引用数据类型的支持,而静态内存分配不需要; 4)静态内存分配是按计划分配,在编译前确定内存块的大小,动态内存分配运行时按需分配...