商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Ubuntu C++怎样使用智能指针

Ubuntu C++怎样使用智能指针

  发布于2026-06-29 阅读(0)

扫一扫,手机访问

C++里的智能指针,说白了就是一类专门替你管理动态内存的对象——你只管分配,它负责释放。这样一来,内存泄漏、野指针这些烦心事就能少一大半。在Ubuntu上要用好智能指针,关键在于把对应的头文件拉进来,然后用标准库里那几个现成的类就行。

Ubuntu C++怎样使用智能指针

常用的就那么三种,各有用武之地:

  1. std::unique_ptr:独占所有权,一个资源只有一个主人。
  2. std::shared_ptr:共享所有权,多个人共同管理一份资源,引用计数归零时自动释放。
  3. std::weak_ptr:配合shared_ptr使用,专门解决循环引用的问题。

那在Ubuntu上具体怎么用呢?直接看代码。

首先,编译器得支持C++11或更高版本。用g++编译时加上-std=c++11(或者-std=c++17)就成:

g++ -std=c++11 -o my_program my_program.cpp

然后,在代码里这样写:

#include 
#include  // 智能指针的头文件

class MyClass {
public:
    MyClass() { std::cout << "MyClass constructor called\n"; }
    ~MyClass() { std::cout << "MyClass destructor called\n"; }
    void doSomething() { std::cout << "Doing something\n"; }
};

int main() {
    // std::unique_ptr 示例
    std::unique_ptr uniquePtr(new MyClass());
    uniquePtr->doSomething();
    // uniquePtr离开作用域时,MyClass实例自动释放

    // std::shared_ptr 示例
    std::shared_ptr sharedPtr1 = std::make_shared();
    {
        std::shared_ptr sharedPtr2 = sharedPtr1;
        // sharedPtr1和sharedPtr2指向同一个实例
        sharedPtr2->doSomething();
        // sharedPtr2离开作用域,引用计数减1,但实例还在(sharedPtr1还活着)
    }
    sharedPtr1->doSomething();
    // sharedPtr1离开作用域时,引用计数归零,实例自动释放

    // std::weak_ptr 示例:避免了shared_ptr循环引用
    std::weak_ptr weakPtr = sharedPtr1;
    if (auto lockedPtr = weakPtr.lock()) { // 尝试提升为shared_ptr
        lockedPtr->doSomething();
    } else {
        std::cout << "MyClass instance has been deleted\n";
    }
    // weakPtr不参与引用计数,所以不会影响实例的生命周期
    return 0;
}

这段代码演示了三种智能指针的典型用法:unique_ptr确保资源唯一持有,shared_ptr通过引用计数实现共享,weak_ptr则作为观察者防止循环引用。只要记住一点:当智能指针离开作用域,它会自动搞定内存释放——这正是现代C++推荐的RAII思想。

本文转载于:https://www.yisu.com/ask/8188395.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注