#include <memory> #include <iostream> void example() { // 使用 unique_ptr 管理动态数组 std::unique_ptr<int[]> arr(new int[5]{1, 2, 3, 4, 5}); // 使用数组 for (int i = 0; i < 5; ++i) { std::cout << arr[i] << ' '; } std::cout << std::endl; } 5. std...
1. 动态数组管理: unique_ptr不仅可以管理单个对象的资源,还可以管理动态数组的资源。通过指定合适的删除器(deleter),可以确保在动态数组不再需要时正确释放内存。这在需要动态创建数组的场景下非常有用,比如读取文件中的数据并存储到动态数组中。 2. 资源所有权的传递: 在某些情况下,我们可能需要将资源的所有权从一...
示例:用std::unique_ptr管理动态内存 #include<iostream> #include<memory>//包含智能指针头文件 intmain%28%29{ //用unique_ptr管理动态分配的整数 std::unique_ptr<int>ptr=std::make_unique<int>%2842%29; std::cout<<"Value:"<<%2Aptr<<std::endl;//输出:42 //不需要手动delete,ptr的生命周期结...
unique_ptr不像shared_ptr一样拥有标准库函数make_shared来创建一个shared_ptr实例。要想创建一个unique_ptr,我们需要将一个new 操作符返回的指针传递给unique_ptr的构造函数。 示例: int main() { // 创建一个unique_ptr实例 unique_ptr<int> pInt(new int(5)); cout << *pInt; } 1. 2. 3. 4. 5...
一、unique_ptr的基本概念 unique_ptr 是一种独占所有权的智能指针,即同一时间只能有一个 unique_ptr 指向某个对象。当 unique_ptr 被销毁时(例如超出作用域或被重置),它所指向的对象也会被自动删除。这种特性使得 unique_ptr 非常适用于管理在堆上动态分配的单个对象。
①不要让auto_ptr和shared_ptr指向new[]申请的动态内存(除非为智能指针定义一个删除器)原因:auto_ptr 和shared_ptr 的默认释放内存方式是delete,如果动态对象是以new[] 形式创建的,比如数组,就不要使用auto_ptr和shared_ptr,否则就会导致以delete形式去释放new[]申请的内存一句话概括就是auto_ptr和shared_ptr只能...
对于动态数组的操作unique_ptr 可以自动上释放,shared_ptr不可以,需要添加一个删除器,即一个lambd表达式 shared_ptr<PTest>p3(newPTest("p3:from shared_ptr")); p3->print(); shared_ptr<PTest>p4(newPTest("p4:from shared_ptr")); p4->print(); ...
C++内存管理之unique_ptr,一个unique_ptr"拥有“他所指向的对象。与shared_ptr不同,某个时刻只能有一个unique_ptr指向一个给定的对象。当uni
因为shared_ptr的默认删除器不支持数组对象,所以当使用shared_ptr管理动态数组时,这时候指定删除器就起大作用了。 代码如下所示: #include <iostream>#include <memory>using namespace std;void DeleteIntPtr(int *p) {cout << "call DeleteIntPtr" << endl;delete p;}int main(){std::shared_ptr<int> ...
}shared_ptr<int>p(newint, ptr_deleter); AI代码助手复制代码 第二个参数指定删除器(一个可调用对象, 其中参数为该类型的指针, 如上面为int*) 当shared_ptr引用计数为0时, 调用传入的而不是默认的删除器来释放对象的内存 当用shared_ptr管理动态数组时, 需要指定删除器, 因为shared_ptr默认删除器不支持数组...