首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌入式STL智能指针

嵌入式STL智能指针
EN

Stack Overflow用户
提问于 2019-08-23 05:28:00
回答 1查看 809关注 0票数 0

我一直在阅读STL,并热衷于使用智能指针,我担心的是它们似乎严重依赖于动态分配,因此堆。

我对嵌入式的经验是,尽可能多地在堆栈上使用静态分配,这将阻止使用智能指针及其所有有用的功能。

我是不是错过了什么,或者我的方法完全错了?

顺便说一句,我专注于STM32 F4 & H7s

EN

回答 1

Stack Overflow用户

发布于 2019-08-23 06:58:28

实际上,std::unique_ptrstd::shared_ptr并不假设它们管理的生存期是在堆上分配的。您可以为这两个对象定义自定义删除程序,以便在智能指针超出范围时运行任意代码。

对于std::unique_ptr,自定义删除器是函数对象形式的附加模板参数,例如

代码语言:javascript
复制
auto CustomDeleter = [] (char *p) { delete [] p; };
std::unique_ptr <char, decltype (CustomDeleter)> up (new char [20], CustomDeleter);

对于std::shared_ptr,它是构造函数的一个附加参数,例如

代码语言:javascript
复制
std::shared_ptr <char> sp (new char [20], CustomDeleter);

请注意,对于std::shared_ptr,堆上分配了一个(小)控制块(您不能将make_shared与自定义删除器一起使用)。

当然,我的示例显示了堆上的分配,但这只是为了演示。

Live demo

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57617270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档