#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;
}std::unique_ptr:独占所有权的智能指针,不能复制,只能移动。当 unique_ptr 超出作用域时,它会自动释放所管理的对象。std::shared_ptr:允许多个指针共享同一个对象。每个 shared_ptr 都会维护一个引用计数器,当最后一个 shared_ptr 被销毁或重置时,对象才会被释放。std::weak_ptr:不增加引用计数,用于打破 shared_ptr 之间的循环引用问题。weak_ptr 不能直接访问对象,需要通过 lock() 方法转换为 shared_ptr 才能使用。这些智能指针可以帮助你更安全地管理动态分配的内存,避免内存泄漏和悬空指针等问题。
上一篇:在线c++编译器
下一篇:c++构造函数
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站