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

c++ 智能指针

作者:热血震荡   发布日期:2025-05-28   浏览:97

#include <iostream>
#include <memory>

// 智能指针示例代码

int main() {
    // 使用 std::unique_ptr 管理单个对象的生命周期
    {
        std::unique_ptr<int> uniquePtr = std::make_unique<int>(10);
        std::cout << "Value managed by unique_ptr: " << *uniquePtr << std::endl;
    } // uniquePtr 在这里被销毁,内存自动释放

    // 使用 std::shared_ptr 管理多个所有者共享的对象
    {
        std::shared_ptr<int> sharedPtr1 = std::make_shared<int>(20);
        std::shared_ptr<int> sharedPtr2 = sharedPtr1; // 共享同一个对象
        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;

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

    return 0;
}

解释说明:

  1. std::unique_ptr:独占所有权的智能指针,不能复制,只能移动。当 unique_ptr 超出作用域时,它会自动释放所管理的对象。
  2. std::shared_ptr:允许多个指针共享同一个对象。每个 shared_ptr 都会维护一个引用计数器,当最后一个 shared_ptr 被销毁或重置时,对象才会被释放。
  3. std::weak_ptr:不增加引用计数,用于打破 shared_ptr 之间的循环引用问题。weak_ptr 不能直接访问对象,需要通过 lock() 方法转换为 shared_ptr 才能使用。

这些智能指针可以帮助你更安全地管理动态分配的内存,避免内存泄漏和悬空指针等问题。

上一篇:c++语言基础知识入门

下一篇:c++map

大家都在看

c++闭包

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

c++ 注释

c++如何判断素数

c++ 获取系统时间

c++进制转换函数

c++ tcp

c++ gcd函数

c++ cli

c++ 树

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

Laravel 中文站