簡體   English   中英

用於嵌入式的STL智能指針

[英]STL smart pointers for embedded

我一直在閱讀STL,並且熱衷於使用智能指針。我擔心的是,它們似乎嚴重依賴於動態分配,因此也依賴於堆。

我在嵌入式系統上的經驗是,您將在堆棧上盡可能多地使用靜態分配,這將阻止使用智能指針及其所有有用的功能。

我在這里遺漏了什么東西還是我的方法完全錯誤?

順便說一句,我專注於STM32 F4和H7

實際上, std::unique_ptrstd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM