实际开发中第一种方法更为常用 不要用同一个裸指针初始化多个unique_ptr对象 运行结果 进程已退出,代码是负数,表示程序是异常退出(原因:多个unique_ptr对同一块内存释放了多次,相当于操作野指针,程序崩溃) 注意:unique_ptr是类,在C++中,把对象传给函数可以传引用,注意不能传值,因为unique_ptr没有拷贝构造函数 ...
std::unique_ptr称为独享智能指针,它独占某个对象管理的所有权,与shared_ptr可以同时有多个共享智能指针拥有某个对象管理的所有权不同。当unique_ptr销毁或者reset,就会释放(析构)被管理的对象了。既然是独占,那么就不能有多个unique_ptr指向同一个对象,unique_ptr也就不能支持复制操作。
#include<memory>intmain(){// 创建一个unique_ptr,指向一个动态分配的int对象std::unique_ptr<int>ptr(newint(42));// 使用指针操作符和解引用操作符访问所指向对象的值std::cout<<*ptr<<std::endl;// 输出: 42// 通过移动构造函数将所有权转移给另一个unique_ptrstd::unique_ptr<int>ptr2=std::m...
#include<memory>voidmanageResource(std::unique_ptr<int>ptr){// 使用资源}// ptr在此处自动销毁,资源被释放intmain(){autoptr=std::make_unique<int>(42);// 创建并初始化unique_ptrmanageResource(std::move(ptr));// 移动所有权到函数内// ptr现在为空,资源已在manageResource内部被释放return0;} sh...
1. 什么是智能指针及unique_ptr的概念 智能指针是C++中用于自动管理动态分配内存的一种机制,它封装了原始指针,并提供了更加安全的内存管理方式。智能指针能够自动释放所管理的内存,从而避免了内存泄漏和野指针等问题。 unique_ptr 是C++11标准库中提供的一种智能指针,它确保了对象拥有唯一的所有权。也就是说,在某一...
std::weak_ptr:弱引用的智能指针,它不共享指针,不能操作资源,是用来监视 shared_ptr 的。 2.初始化 (1)std::unique_ptr 是一个独占型的智能指针,它不允许其他的智能指针共享其内部的指针,可以通过它的构造函数初始化一个独占智能指针对象,但是不允许通过赋值将一个 unique_ptr 赋值给另一个 unique_ptr。
1、unique_ptr 一个unique_ptr拥有它指向的对象的独占所有权,并且会在指针超出范围时销毁该对象。unique_ptr明确地阻止复制其包含的指针。不过可以使用std::move函数必须用于将包含的指针的所有权转移给另一个unique_ptr。示例代码 2、shared_ptr 引用计数的智能指针。当您想要将一个原始指针分配给多个所有者时使用...
从名字上看shared_ptr是共享指针,意味着我们可以复制shared_ptr,复制出的智能指针指向同一个内部数据指针(即被智能指针包装的真正数据)。 构造shared_ptr 有多种方法可以构造shared_ptr,下面代码中有4种构造方式: int *p = new int(1); shared_ptr<int> sp1(p);// 通过普通指针p构造shared_ptr ...
在(一)我们研究了unique_ptr, 它可以用来指向一个原生指针,这样就不用操心原生指针所指资源的释放问题了。但,有的时候需要多个地方使用、保存一个指针所绑定的资源,这时只有一个unique_ptr就不够用了。这时就应该shared_ptr出场了,当用一个shared_ptr指针A指向一个资源时R,这个shared_ptr指针A的内部计数器为1,当...
std::unique_ptr<int> u8 (std::auto_ptr<int>(newint)); std::cout<<"u1:"<< (u1?"not null":"null") <<'\n'; std::cout<<"u2:"<< (u2?"not null":"null") <<'\n'; std::cout<<"u3:"<< (u3?"not null":"null") <<'\n'; ...