c++ 关于共享指针在数组中的所有权转移
2023-12-25 14:44:42
在 C++ 中,将 shared_ptr
的 vector
插入到另一个 vector
时,shared_ptr
的所有权会发生变化。插入操作后,原始的 shared_ptr
对象所管理的资源会被转移给目标 vector
,也就是说,原始 vector
中的 shared_ptr
对象会失去对资源的所有权。
当 shared_ptr
所管理的资源引用计数降为零时,资源会被释放。因此,在将 shared_ptr
的 vector
插入到另一个 vector
后,如果原始 vector
中的 shared_ptr
对象没有其他地方持有,它们的资源将会被释放。
以下是一个示例代码,展示了如何插入 shared_ptr
的 vector
到另一个 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
使用引用计数的方式来管理资源的生命周期,在没有其他持有者时自动释放资源。
文章来源:https://blog.csdn.net/qq_36541069/article/details/135198300
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!