使用 vector
在 C++ 中,将
std::shared_ptr
std::vector
vector<shared_ptr<T>>
使用
vector<shared_ptr<T>>
vector<T>
vector<unique_ptr<T>>
shared_ptr
shared_ptr<Base>
shared_ptr
vector<shared_ptr<T>>
不要将裸指针多次构造
shared_ptr
make_shared
std::vector<std::shared_ptr<MyClass>> vec; vec.push_back(std::make_shared<MyClass>(arg1, arg2));
避免这样写:
MyClass* ptr = new MyClass(); vec.push_back(std::shared_ptr<MyClass>(ptr)); vec.push_back(std::shared_ptr<MyClass>(ptr)); // 错误!两个 shared_ptr 独立管理同一指针
如果
shared_ptr
shared_ptr
解决方法:在适当位置使用
std::weak_ptr
class Node { public: std::shared_ptr<Node> parent; std::vector<std::shared_ptr<Node>> children; // 如果 children 反向引用 parent,应考虑用 weak_ptr };
vector<shared_ptr<T>>
vector<T>
shared_ptr
建议:
vector<T>
vector<unique_ptr<T>>
shared_ptr
vector
push_back
reallocation
shared_ptr
shared_ptr
vec.push_back(ptr); // 增加引用计数,安全 vec.erase(it); // 删除元素,引用计数减一,对象可能被释放
注意:删除
vector
shared_ptr
虽然
shared_ptr
shared_ptr
// 多线程操作同一个 shared_ptr 实例时要加锁 std::shared_ptr<MyClass> sp = std::make_shared<MyClass>(); std::vector<std::shared_ptr<MyClass>> vec; // 线程1 vec.push_back(sp); // 安全:拷贝 sp,增加引用计数 // 线程2 vec.push_back(sp); // 安全:同上 // 但如果多个线程修改同一个 shared_ptr 变量,则不安全
make_shared
unique_ptr
shared_ptr
vector<unique_ptr<T>>
vector<T>
基本上就这些。
vector<shared_ptr<T>>
以上就是智能指针在容器中怎么用 vector存储shared_ptr注意事项的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 //m.sbmmt.com/ All Rights Reserved | php.cn | 湘ICP备2023035733号