c++ 关于共享指针在数组中的所有权转移

在 C++ 中,将 shared_ptrvector 插入到另一个 vector 时,shared_ptr 的所有权会发生变化。插入操作后,原始的 shared_ptr 对象所管理的资源会被转移给目标 vector,也就是说,原始 vector 中的 shared_ptr 对象会失去对资源的所有权。

shared_ptr 所管理的资源引用计数降为零时,资源会被释放。因此,在将 shared_ptrvector 插入到另一个 vector 后,如果原始 vector 中的 shared_ptr 对象没有其他地方持有,它们的资源将会被释放。

以下是一个示例代码,展示了如何插入 shared_ptrvector 到另一个 vector 并释放资源:

#include <iostream>
#include <vector>
#include <memory>

struct MyObject {
    int value;

    MyObject(int val) : value(val) {
        std::cout << "Constructing MyObject: " << value << std::endl;
    }

    ~MyObject() {
        std::cout << "Destructing MyObject: " << value << std::endl;
    }
};

int main() {
    std::vector<std::shared_ptr<MyObject>> source;

    // 在源 vector 中插入 shared_ptr 对象
    source.push_back(std::make_shared<MyObject>(1));
    source.push_back(std::make_shared<MyObject>(2));
    source.push_back(std::make_shared<MyObject>(3));

    std::vector<std::shared_ptr<MyObject>> destination;

    // 将源 vector 插入到目标 vector
    destination.insert(destination.end(), source.begin(), source.end());

    // 输出目标 vector 的元素数量
    std::cout << "Destination vector size: " << destination.size() << std::endl;

    // 清空源 vector
    source.clear();

    // 输出目标 vector 的元素数量
    std::cout << "Destination vector size after clearing source: " << destination.size() << std::endl;

    // 目标 vector 中 shared_ptr 对象的资源会在此处释放

    return 0;
}

运行以上代码,你将看到输出的结果是:

Constructing MyObject: 1
Constructing MyObject: 2
Constructing MyObject: 3
Destination vector size: 3
Destination vector size after clearing source: 3
Destructing MyObject: 1
Destructing MyObject: 2
Destructing MyObject: 3

可以看到,在清空源 vector 后,目标 vector 仍然保留了原始 shared_ptr 的资源,并正常进行了释放。这是因为 shared_ptr 使用引用计数的方式来管理资源的生命周期,在没有其他持有者时自动释放资源。

相关推荐

  1. c++ 关于共享指针数组所有权转移

    2023-12-25 19:38:04       39 阅读
  2. C++指针、引用和数组

    2023-12-25 19:38:04       29 阅读
  3. C语言多级指针指针数组数组指针

    2023-12-25 19:38:04       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-25 19:38:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-25 19:38:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-25 19:38:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-25 19:38:04       20 阅读

热门阅读

  1. 数组--[15]三数之和/medium

    2023-12-25 19:38:04       31 阅读
  2. C/C++中double类型的比较

    2023-12-25 19:38:04       43 阅读
  3. rust 项目的文件结构

    2023-12-25 19:38:04       45 阅读
  4. 如何在Vue3中实现无缝热重载:提升你的开发效率

    2023-12-25 19:38:04       35 阅读
  5. Web 安全之文件下载漏洞详解

    2023-12-25 19:38:04       42 阅读
  6. 零基础上手:CentOS 防火墙完全指南

    2023-12-25 19:38:04       35 阅读