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

c++智能指针

作者:恋你如初   发布日期:2025-09-06   浏览:21

#include <iostream>
#include <memory>

// 智能指针示例代码

int main() {
    // 使用 std::unique_ptr 管理动态分配的对象
    {
        std::unique_ptr<int> uniquePtr(new int(10));  // 创建一个 unique_ptr,管理一个 int 类型的动态对象
        std::cout << "Value managed by unique_ptr: " << *uniquePtr << std::endl;
    }  // uniquePtr 在这里超出作用域,自动释放所管理的对象

    // 使用 std::shared_ptr 共享对象的所有权
    {
        std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(20);  // 创建一个 shared_ptr,管理一个 int 类型的动态对象
        std::shared_ptr<int> sharedPtr2 = sharedPtr1;  // 复制 shared_ptr,共享所有权
        std::cout << "Value managed by shared_ptr: " << *sharedPtr1 << std::endl;
        std::cout << "Reference count: " << sharedPtr1.use_count() << std::endl;  // 输出引用计数
    }  // sharedPtr1 和 sharedPtr2 超出作用域,自动释放所管理的对象

    // 使用 std::weak_ptr 避免循环引用
    {
        std::shared_ptr<int> sharedPtr = std::make_shared<int>(30);
        std::weak_ptr<int> weakPtr = sharedPtr;  // 创建一个 weak_ptr,不增加引用计数
        if (std::shared_ptr<int> tempPtr = weakPtr.lock()) {  // 检查 weak_ptr 是否仍然有效
            std::cout << "Value managed by weak_ptr: " << *tempPtr << std::endl;
        }
    }

    return 0;
}

解释说明:

  1. std::unique_ptr:独占所有权的智能指针。它确保同一时间只有一个 unique_ptr 可以管理某个对象。当 unique_ptr 超出作用域时,会自动释放其所管理的对象。

  2. std::shared_ptr:共享所有权的智能指针。多个 shared_ptr 可以同时管理同一个对象,并通过引用计数来决定何时释放对象。当最后一个 shared_ptr 被销毁或重置时,对象才会被释放。

  3. std::weak_ptr:弱引用智能指针。它不会增加引用计数,通常用于避免循环引用问题。通过 lock() 方法可以尝试获取一个有效的 shared_ptr,如果对象已经被释放,则返回空指针。

以上代码展示了如何使用 C++ 中的三种主要智能指针类型来管理动态分配的对象。

上一篇:bits/stdc++.h

下一篇:c++ auto

大家都在看

c++闭包

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

c++ 注释

c++如何判断素数

c++ orm框架

c++freopen怎么用

c++ 获取系统时间

c++进制转换函数

c++ vector 清空

c++ tcp

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

Laravel 中文站