我一直在阅读STL,并且热衷于使用智能指针。我担心的是,它们似乎严重依赖于动态分配,因此也依赖于堆。
我在嵌入式系统上的经验是,您将在堆栈上尽可能多地使用静态分配,这将阻止使用智能指针及其所有有用的功能。
我在这里遗漏了什么东西还是我的方法完全错误?
顺便说一句,我专注于STM32 F4和H7
最佳答案
实际上,std::unique_ptr
和std::shared_ptr
并不假定它们管理的生存期的对象已分配在堆上。您可以为这两个对象定义一个自定义删除器,以在智能指针超出范围时运行任意代码。
对于std::unique_ptr
,自定义删除器是功能对象形式的附加模板参数,例如
auto CustomDeleter = [] (char *p) { delete [] p; };
std::unique_ptr <char, decltype (CustomDeleter)> up (new char [20], CustomDeleter);
对于
std::shared_ptr
,它是构造函数的附加参数,例如std::shared_ptr <char> sp (new char [20], CustomDeleter);
请注意,对于
std::shared_ptr
,在堆上分配了一个(小的)控制块(不能将make_shared
与自定义删除器一起使用)。当然,我的示例显示了堆上的分配,但这仅是示例。
Live demo
关于c++ - 用于嵌入式的STL智能指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57617270/