1. 什么是std::shared_ptr std::shared_ptr是 C++ 标准库中的一种智能指针,允许多个指针共享管理同一个对象的生命周期。它通过引用计数(reference count)来记录有多少个指针指向同一个对象,当引用计数为零时,std::shared_ptr会自动释放对象,避免手动管理内存带来的风险。 #include<iostream> #include<memory> voi...
但这种做法需要谨慎,因为如果我们用同一个原始指针创建了多个std::shared_ptr,那么每个std::shared_ptr都会认为自己是唯一拥有该对象的智能指针,这将导致多次删除同一个对象,从而引发未定义行为(比如引发崩溃)。 #include<memory>intmain(){// 使用 new 创建一个原始指针int*rawPtr=newint(10);// 使用原始指针...
std::unique_ptr和std::shared_ptr是C++中管理动态内存的强大工具。正确使用这些智能指针可以大大减少内存泄漏的风险,提高代码的安全性和可维护性。理解它们的特性和适用场景对于编写高质量的C++程序至关重要。
1)std::shared_ptr的大小是裸指针的两倍,因为它的内部包含一个指向该资源的裸指针,以及一个指向该资源引用计数所在的控制块的裸指针。2)引用计数的内存必须动态分配。3)引用计数的递增和递减都是原子操作,会带来额外的开销。 注:std::shared_ptr的移动构造函数会将源std::shared_ptr置空,但不会对引用计数有任...
表现为独占所有权(exclusive ownership)的智能指针。任何时候只有一个unique_ptr实例可以拥有并管理某个对象。 当unique_ptr离开其作用域或被显式重置时,它会自动删除其所指向的对象。 不支持复制构造函数和赋值操作符,但可以通过转移语义(move semantics)进行移动构造和移动赋值,转移过程中原unique_ptr变为空指针,所有...
std::shared_ptr是C++11标准库中定义的智能指针,与其他智能指针(如std::unique_ptr和std::weak_ptr)相比有以下区别: 所有权共享:std::shared_ptr可以共享所有权,多个std::shared_ptr可以指向同一个对象,当最后一个指向对象的std::shared_ptr被销毁时,对象才会被释放。而std::unique_ptr拥有唯一所有权,不能被...
通常情况下shared_ptr智能指针的构造有如下3种:构造一个“空”的shared_ptr智能指针,该指针构造实例化...
std::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。 std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: ...
shared_ptr共享指针对象存储着另一个对象指针的同时,还可以共享一个对象的拥有权。这个特性可以用来指向其他成员对象,同时拥有创建他们自身的类的对象。 创建shared_ptr对象时,可以不初始化,这时候它为空。(如果使用别名构造函数创建它,则空的shared_ptr对象可能具有非空存储指针)。std::shared_ptr还可以用于不完整类...
std::shared_ptr 是一种智能指针,多个shared_ptr可以指向同一个对象,至少有一个shared_ptr指向该对象时,该块内存不会被释放,直到所有指向该内存对象的shared_ptr都被回收或者通过 operator= or reset() 修改了指向的对象时,该对象的内存才会被自动释放。