[英]STL smart pointers for embedded
我一直在閱讀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
與自定義刪除器一起使用)。
當然,我的示例顯示了在堆上的分配,但這僅是示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.