C++ 中的智能指针是一种用于管理动态分配的内存的指针,它们可以自动进行内存的分配和释放,避免了手动管理内存的麻烦。C++11 引入了两种类型的智能指针:std::shared_ptr 和 std::unique_ptr。下面是它们的使用说明和示例:

  1. std::shared_ptr: std::shared_ptr 是一种可以共享所有权的智能指针。多个 std::shared_ptr 对象可以指向同一个动态分配的内存,当最后一个 std::shared_ptr 对象离开作用域时,内存会自动释放。

使用示例:

#include <memory>
#include <iostream>

int main() {
    std::shared_ptr<int> p1(new int(10)); // 创建一个指向 int 的 shared_ptr,初始值为 10
    std::shared_ptr<int> p2 = p1; // 复制 p1,p1 和 p2 共享同一块内存

    std::cout << *p1 << std::endl; // 输出 10
    std::cout << *p2 << std::endl; // 输出 10

    *p1 = 20; // 修改内存中的值

    std::cout << *p1 << std::endl; // 输出 20
    std::cout << *p2 << std::endl; // 输出 20

    return 0;
}
  1. std::unique_ptr: std::unique_ptr 是一种独占所有权的智能指针。每个 std::unique_ptr 对象只能指向动态分配的内存的唯一所有者,当 std::unique_ptr 对象离开作用域时,内存会自动释放。

使用示例:

#include <memory>
#include <iostream>

int main() {
    std::unique_ptr<int> p1(new int(10)); // 创建一个指向 int 的 unique_ptr,初始值为 10

    std::cout << *p1 << std::endl; // 输出 10

    // std::unique_ptr<int> p2 = p1; // 错误!unique_ptr 不能复制所有权

    std::unique_ptr<int> p2 = std::move(p1); // 使用 std::move 转移所有权

    // std::cout << *p1 << std::endl; // 错误!p1 不再拥有内存的所有权
    std::cout << *p2 << std::endl; // 输出 10

    *p2 = 20; // 修改内存中的值

    std::cout << *p2 << std::endl; // 输出 20

    return 0;
}

这些是 C++ 中智能指针的基本使用说明和示例。它们大大简化了内存管理的工作,并提供了更安全和高效的方式来处理动态分配的内存。


原文地址: https://www.cveoy.top/t/topic/95V 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录