我一直在阅读STL,并热衷于使用智能指针,我担心的是它们似乎严重依赖于动态分配,因此堆。
我对嵌入式的经验是,尽可能多地在堆栈上使用静态分配,这将阻止使用智能指针及其所有有用的功能。
我是不是错过了什么,或者我的方法完全错了?
顺便说一句,我专注于STM32 F4 & H7s
发布于 2019-08-23 06:58:28
实际上,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与自定义删除器一起使用)。
当然,我的示例显示了堆上的分配,但这只是为了演示。
https://stackoverflow.com/questions/57617270
复制相似问题