1. 所有权:`unique_ptr`是独占所有权的智能指针,即同一时间只能有一个`unique_ptr`指向一个对象。而`shared_ptr`是共享所有权的智能指针,可以有多个`shared_ptr`指向同一个对象。2.内存管理:`unique_ptr`使用独占式所有权,当`unique_ptr`被销毁时,它所管理的对象也会被销毁。而`shared_ptr`使用引用
unique_ptr的功能基本和shared_ptr相同,也是用于管理堆内存的智能指针,但是不允许多个unique_ptr指向同一个对象。 2.2 unique_ptr使用方法 初始化 std::unique_ptr<Z> up1; std::unique_ptr<Z> up2(nullptr); std::unique_ptr<Z> up1(new Z(1)); std::unique_ptr<Z> up2(up1); // 错误,不能使...
和 shared_ptr 指针最大的不同之处在于,unique_ptr 指针指向的堆内存无法同其它 unique_ptr 共享,也就是说,每个 unique_ptr 指针都独自拥有对其所指堆内存空间的所有权。 这也就意味着,每个 unique_ptr 指针指向的堆内存空间的引用计数,都只能为 1,一旦该 unique_ptr 指针放弃对所指堆内存空间的所有权,则该...
独占所有权:每个unique_ptr实例拥有对其所指向对象的唯一所有权。这意味着在任何时候只有一个unique_ptr可以指向一个特定的对象。 自动释放内存:当unique_ptr超出作用域或被重新赋值时,它所管理的内存会自动释放。这样就避免了内存泄漏的问题。 指针语义:unique_ptr的使用方式与原始指针相似,可以通过指针操作符(->)和...
unique_ptr 是一个独享所有权的智能指针,它提供了严格意义上的所有权。它取代了C++98中的auto_ptr。 unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中删除关联的原始指针。 unique_ptr具有->和*运算符重载符,因此它可以像普通指针一样使用。 #include <iostream> #include...
C++中的智能指针unique_ptr与shared_ptr的主要区别如下:unique_ptr: 独占所有权:unique_ptr持有对象的独占所有权,即任何时候只有一个unique_ptr可以指向一个特定对象。 禁止拷贝:unique_ptr禁止拷贝操作,只支持移动操作,这确保了对象的独占性。 自动销毁:当unique_ptr离开作用域时,它所指向的对象会...
这下我们明白了,unique_ptr的封装太简单了,没有 control block,Deleter(包括默认的std::default_delete)直接做在unique_ptr一起了,这就导致unique_ptr的析构函数需要亲手析构被管理的类型,因此析构函数必须看到 complete type。然而反过来,因为构建的时候只需要保存下指针,所以unique_ptr构造的时候不需要看到 complete...
std::unique_ptr:独占所有权 std::shared_ptr:共享所有权 std::weak_ptr:解决循环引用 本文将系统讲解这些智能指针的使用方式、实现原理与应用场景。 二、传统指针的问题 示例:内存泄漏 void leak() { int* p = new int(10); // 没有 delete,造成内存泄漏 ...
第一小节:介绍系列视频的大纲, 以及内容第二小节: 介绍shared_ptr 第三小节:介绍shared_ptr的两种用法,会通过代码给带大家进行演示第四个节:介绍unique_ptr 第五小节: 介绍unique_ptr的两种用法,会通过代码给带大家进行演示第六小节:怎么在面试中给面试官进行表达...