intmain(){ // 创建shared_ptr autoptr1 = std::make_shared<SharedClass>(); { // 创建另一个指向同一对象的shared_ptr std::shared_ptr<SharedClass> ptr2 = ptr1; std::cout <<"使用计数: "<< ptr1.use_count() << std::endl;// 输出 2 // 从对象内部获取shared_ptr autoptr3 = ptr1...
std::shared_ptr 是一种支持共享所有权的智能指针。多个 std::shared_ptr 可以同时管理同一个对象,当最后一个 std::shared_ptr 被销毁时,资源才会被释放。 示例:用 std::shared_ptr 实现共享资源#include<iostream> #include<memory> intmain%28%29{ //用shared_ptr创建一个共享的整数 std::shared_ptr<int...
shared_ptr作为另一个常用的智能指针,它和unique_ptr智能指针的理念有着很大的不同,它提供了对资源共享管理,即对资源所有权的共享(shared ownership),这就要求shared_ptr必须是一个可复制的对象。但是由于shared_ptr对象有很多个,而具体的对象资源只有一个这就要求所有共享对象资源的shared_ptrs指针中最终只能有...
int main() { // 创建一个 shared_ptr 并指向新建的 MyClass 对象 std::shared_ptr<MyClass> ptr1 = std::make_shared<MyClass>(42); // 访问对象的方法 std::cout << "Value: " << ptr1->GetValue() << std::endl; // 创建另一个 shared_ptr,共享 ptr1 所指向的对象 std::shared_ptr<...
智能指针思想实践(std::unique_ptr, std::shared_ptr) 1 smart pointer 思想 个人认为smart pointer实际上就是一个对原始指针类型的一个封装类,并对外提供了-> 和 * 两种操作,使得其能够表现出原始指针的操作行为。 要理解smart pointer思想首先要了解一个概念RAII(Resource Acquisition Is Initialization...
C++11 引入了智能指针来自动管理内存,主要包括std::unique_ptr和std::shared_ptr。这两种智能指针各有特点,适用于不同的场景。 std::unique_ptr 特点:std::unique_ptr是一种独占式智能指针,它保证同一时间只有一个指针拥有对对象的所有权。当std::unique_ptr被销毁时,它所指向的对象也会被自动删除。
std::unique_ptr和std::shared_ptr可以通过以下方式使用: // C++11语法 std::unique_ptr<MyClass> my_unique_ptr(new MyClass()); std::shared_ptr<MyClass> my_shared_ptr(new MyClass()); // C++14提供了更安全的方法 auto my_unique_ptr = std::make_unique<MyClass>(); auto my_shared_ptr...
std::make_shared通常会更高效,因为它只进行一次动态内存分配,同时分配了引用计数和对象的存储空间。而直接使用new操作符创建std::shared_ptr则至少需要两次动态内存分配(一次为对象,一次为引用计数控制块)。 auto ptr = std::make_shared<MyClass>(); // 一次分配,同时创建对象和控制块 安全方面和std::make_...
1.2.3 std::weak_ptr std::weak_ptr是一种特殊类型的智能指针,它不会影响其指向的对象的生命周期,即它不会增加该对象的引用计数。std::weak_ptr通常用于解决std::shared_ptr的循环引用问题。 std::shared_ptr<int> ptr1(new int(5));std::weak_ptr<int> weakPtr = ptr1; // weakPtr points to ptr...
unique_ptr与shared_ptr概览unique_ptrunique_ptr表示独占所有权的智能指针,同一时间内只能有一个u 智能指针 内存泄漏 循环引用 shared_ptr注意事项 这是一篇关于讲解shared_ptr使用过程中常见的问题及对应方法的文章什么是shared_ptr自行百度。常见问题1.多次引用同一数据{int* p = new int[10];std::shared_ptr...