std::shared_ptr 可以通过 get() 方法来获取原始指针,通过 reset() 来减少一个引用计数, 并通过use_count()来查看一个对象的引用计数。例如: auto pointer = std::make_shared<int>(10); auto pointer2 = pointer; // 引用计数+1 auto pointer3 = pointer; // 引用计数+1 int *p = pointer.get();...
std::unique_ptr是一种独占所有权的智能指针。它确保一个对象只能被一个unique_ptr所拥有,这意味着不能复制unique_ptr,只能移动它。 主要特性 独占所有权: 一个unique_ptr不能被复制,只能被移动。 自动释放: 当unique_ptr离开作用域时,它所管理的对象会被自动删除。 零开销: 在大多数操作中,unique_ptr与原始...
std::shared_ptr<> 是C++标准库中的一个智能指针,用于自动管理具有引用计数的动态分配的对象。它确保当没有任何 std::shared_ptr 指向对象时,对象会被自动删除。从 std::shared_ptr<> 获取原始指针(即裸指针)是一个常见操作,但需要注意避免悬空指针等问题。
最后管理新的对象Person(3) 2.获取原始指针 std::shared_ptr<int> p(new int(5)); int *pInt = p.get() 3.指定删除器 默认删除器不支持数组对象,所以需要指定删除器。 4.注意事项 原始指针只能初始化一个shared_ptr; 在函数实参中不创建shared_ptr; 禁止通过shared_from_this()返回this,这样做可能造成...
(1)如果从std::shared_ptr获取原始指针(通过.get()方法),然后继续使用这个原始指针,即使所有std::shared_ptr都已释放资源,原始指针仍然存在,但它指向的对象已经被销毁。原始指针就变成了悬空指针。 std::shared_ptr<int> sp(new int(42)); int* rawPtr = sp.get(); // 获取原始指针 ...
通过其他的指向被管理对象的shared_ptr智能指针对象来获取对象所有权的 通过其他weak_ptr对象进行获取,该...
使用get()可以获取shared_ptr对象的指针变量。控制区块的指针变量会在共享拥有者变为0的时候被删除。这些指针并非一定要相等。 共享指针对象shared_ptr的析构函数会减少区块共享拥有者的数量。当减到0的时候,控制区块会调用管理对象的析构函数。控制区块直到std::weak_ptr计数器到0的时候才会释放内存。
1.3.5 普通指针 普通指针用于指向内存中的一个对象或函数。 优点:引用类型,灵活,可以随意指向任何类型 的对象。 缺点:必须手动管理内存,易导致内存泄漏或悬垂指针。 1.3.6 智能指针 智能指针是C++中的一个对象,它可以用作普通指针,但更重要的是,它负责自动清理所指向的对象。
表现为独占所有权(exclusive ownership)的智能指针。任何时候只有一个unique_ptr实例可以拥有并管理某个对象。 当unique_ptr离开其作用域或被显式重置时,它会自动删除其所指向的对象。 不支持复制构造函数和赋值操作符,但可以通过转移语义(move semantics)进行移动构造和移动赋值,转移过程中原unique_ptr变为空指针,所有...
// OK, 调用 operator*, 然后获取其地址 output("共享指针 get(): ", pShared.get()); delete pInt;std::cout << "\n演示shared_ptr 别名构造函数。\n"; struct Base1 { int i1{}; }; struct Base2 { int i2{}; }; struct Derived :...