在cpp con 2019的演讲中,钱德勒Carruth认为c++ std::unique_ptr不是一个真正的零成本(运行时)抽象:https://www.youtube.com/watch?v=rHIkrotSwcc&t=6s。
我在一个嵌入式系统上工作,团队拒绝使用智能指针,甚至std::unique_ptr。高级工程师反对智能指针的论点是关于假定的固有运行时开销。
尽管在cpp con 2019上声称std::unique_ptr不是零成本,钱德勒Carruth仍然坚持使用std::unique_ptr比使用原始指针更好。当钱德勒在服务器核心上工作时,是否有一些特定于嵌入式系统的限制条件使Chandler的论点不适用于嵌入式开发?特别是在真实的环境(RTOS)中,原始指针是必要的吗?
我想不出或找到一个关于嵌入式系统的资格,可以符合钱德勒在cpp 2019上声称的任何内容。过去几天我查阅的所有资源都建议在嵌入式开发中使用智能指针。
1条答案
按热度按时间cgvd09ve1#
“业绩”需要资质。在实时系统中,关键的方面是“确定性”。如果
std::unique_ptr
操作具有确定性(恒定时间)行为,则安全性胜过原始速度。线程安全性和原子性可能是一个考虑因素。实现这一点的方法可能会导致非确定性行为。然而,使用
std::unique_ptr
建议使用动态内存,以及每当指针在作用域退出时调用析构函数,这本身是不确定的,在许多实时和/或安全关键系统中不建议使用。我建议,如果你的项目接受来自堆的动态对象示例化(而不是placement-new,或其他确定性解决方案),那么
std::unique_ptr
的使用将缓解由此产生的内存泄漏问题,但不是确定性或线程安全问题。当然,您可以定义一个自定义的删除器,如果使用placement-new,则可以确保对象析构函数在指针超出作用域时被自动调用。