Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

智能指针c++11

作者:洃铯哖輪   发布日期:2025-07-29   浏览:6

#include <iostream>
#include <memory>

// 智能指针示例代码

int main() {
    // 使用 std::unique_ptr 管理单个对象
    std::unique_ptr<int> uniquePtr(new int(10));
    // 或者使用 make_unique (C++14 及以上)
    // auto uniquePtr = std::make_unique<int>(10);

    std::cout << "Value managed by unique_ptr: " << *uniquePtr << std::endl;

    // 使用 std::shared_ptr 管理多个所有者共享的对象
    std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(20);
    {
        std::shared_ptr<int> sharedPtr2 = sharedPtr1; // 共享所有权
        std::cout << "Reference count after sharing: " << sharedPtr1.use_count() << std::endl;
    } // sharedPtr2 在这里被销毁,引用计数减 1

    std::cout << "Reference count after sharedPtr2 is destroyed: " << sharedPtr1.use_count() << std::endl;

    // 使用 std::weak_ptr 避免循环引用
    std::shared_ptr<int> sharedPtr3 = std::make_shared<int>(30);
    std::weak_ptr<int> weakPtr = sharedPtr3;

    if (std::shared_ptr<int> lockedPtr = weakPtr.lock()) { // 检查是否有效
        std::cout << "Value managed by weak_ptr: " << *lockedPtr << std::endl;
    } else {
        std::cout << "weak_ptr has expired" << std::endl;
    }

    return 0;
}

解释说明:

  1. std::unique_ptr:

    • std::unique_ptr 是独占所有权的智能指针,它确保同一时间只有一个 unique_ptr 拥有该对象。当 unique_ptr 被销毁时,它所管理的对象也会被自动释放。
    • 使用 new 创建对象并将其交给 unique_ptr 管理,或者使用 std::make_unique(C++14 及以上版本)。
  2. std::shared_ptr:

    • std::shared_ptr 是共享所有权的智能指针,允许多个 shared_ptr 同时拥有同一个对象。每个 shared_ptr 都会增加引用计数,当最后一个 shared_ptr 被销毁时,对象才会被释放。
    • 使用 std::make_shared 创建 shared_ptr 是更高效的方式,因为它只涉及一次内存分配。
  3. std::weak_ptr:

    • std::weak_ptr 不增加引用计数,用于解决 shared_ptr 可能导致的循环引用问题。它可以观察一个由 shared_ptr 管理的对象,但不会阻止对象被销毁。
    • 使用 lock() 方法可以尝试获取一个有效的 shared_ptr,如果对象已经被销毁,则返回空指针。

通过这些智能指针,C++11 提供了更安全和高效的内存管理方式,减少了手动管理内存的风险。

上一篇:c++ map insert

下一篇:c++ string split

大家都在看

c++闭包

c++单引号和双引号的区别

c++ 注释

c++如何判断素数

c++freopen怎么用

c++ 获取系统时间

c++进制转换函数

c++ tcp

c++ gcd函数

c++ cli

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站