2015-07-21 128 views
0

std::get_temporary_buffer返回std::pair,它持有一個指向分配存儲開始位置的指針和分配的對象個數,其唯一目的是:std::return_temporary_buffer用於取消分配內存以前分配std::get_temporary_bufferstd :: get_temporary_buffer返回的是原始指針而不是智能的指針

這兩個函數都位於<memory>頭上,主要目的是提供增強內存管理(正如其名稱所暗示的)的工具並使內存管理更加安全。

關於內存管理的安全性,<memory>頭還提供了智能指針實用程序,它允許以類似RAII的方式管理內存,從而使內存管理異常安全。

C++ 14還增加了std::make_unique幫助函數,所以我們可以在很多情況下避免使用原始指針。

在減少原始指針使用的所有努力中,實現std::get_temporary_buffer返回一個原始指針而不是智能指針是相當混亂的。這就是爲什麼我想問:

  • 是否有任何理由std::get_temporary_buffer返回一個原始指針,而不是返回一個聰明的指針?
  • 如果出現這種「老式」手動分配和釋放內存的原因,使用智能指針無法實現哪個目標?

回答

3

如果你看一下文檔的get_temporary_buffer等人的舊SGI STL實現,他們說...

注:僅供向後兼容get_temporary_bufferreturn_temporary_buffer。如果您正在編寫新代碼,則應該使用temporary_buffer類。

這有效地承認更好的自動化管理的可取性。 GCC增加了temporary_buffer作爲擴展(見here),但它從未將其納入標準。總之,它只是沒有用,所以擁有更好的界面並不是優先考慮的事情。面對大多數現代操作系統所使用的樂觀內存分配策略,操作系統的整個概念都會猜測它是否應該爲您提供所有請求的內存或一些較小的數量,一旦您獲得多次請求而不是容易獲得記憶太過慷慨,第一次讓其他人有點餓死:不是一個非常實用的想法。

如果你在意,你可以提交一個建議,爲以後的C++標準....

6

簡單的答案是,std::get_temporary_buffer成立之前的智能指針進行了規範,並改變std::get_temporary_buffer在C++ 11的返回值將有斷碼的是依賴於它,這是C++標準庫絕對不可接受的。

現在,爲什麼他們沒有標準化一個新的智能指針等值?嗯,也許沒有人有興趣有一個。就我個人而言,我覺得有一個智能指針擁有許多對象是很奇怪的。如果您需要智能陣列,請使用std::vector