尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

深入理解C++ 智能指针std::shared_ptr<三>reset()方法

发布时间:2026/9/24 2:25:52

资讯中心
01
ARTICLE

深入理解C++ 智能指针std::shared_ptr<三>reset()方法

深入理解C++ 智能指针std::shared_ptr<三>reset()方法
std::shared_ptr的reset()方法是改变其所有权状态的核心操作。它的主要作用是释放当前管理的对象如果有并可选地接管一个新对象。原型常用重载形式void reset() noexcept; // (1)template class Y void reset( Y* ptr ); // (2)template class Y, class Deleter void reset( Y* ptr, Deleter d ); // (3)请看下面代码示例#include iostream #include memory // 一个简单的类用于观察构造和析构 struct Foo { int val; Foo(int v) : val(v) { std::cout 构造 Foo( val )\n; } ~Foo() { std::cout 析构 Foo( val )\n; } }; int main() { std::shared_ptrFoo sp; // ---------- (1) void reset() noexcept ---------- // 当前 sp 为空调用 reset() 什么也不做 sp.reset(); std::cout 1. sp.reset() 后sp 为 (sp ? 非空 : 空) \n\n; // ---------- (2) reset( Y* ptr ) ---------- sp.reset(new Foo(1)); // 接管新对象 Foo(1) std::cout 2. sp.reset(new Foo(1)) 后sp 管理 Foo(1)\n\n; // 再次调用 reset() 释放当前对象Foo(1)并置空 sp.reset(); // 释放 Foo(1) std::cout 3. 再次 sp.reset() 释放了 Foo(1)sp 变为空\n\n; // 重新接管另一个对象 Foo(2) sp.reset(new Foo(2)); std::cout 4. sp.reset(new Foo(2)) 后sp 管理 Foo(2)\n\n; // ---------- (3) reset( Y* ptr, Deleter d ) ---------- // 自定义删除器先打印信息再 delete auto customDeleter [](Foo* p) { std::cout 自定义删除器删除 Foo( p-val )\n; delete p; }; // reset 会先释放当前管理的 Foo(2)默认删除然后接管 Foo(3) 并使用自定义删除器 sp.reset(new Foo(3), customDeleter); std::cout 5. sp.reset(new Foo(3), customDeleter) 后sp 管理 Foo(3)自定义删除器\n\n; // 程序结束sp 析构时会调用自定义删除器删除 Foo(3) std::cout --- 主函数结束sp 即将销毁 ---\n; return 0; }
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。