我有非常相似的的std :: string沒有自由存儲內存分配
How do I allocate a std::string on the stack using glibc's string implementation?
一個問題,但我認爲這是值得再次詢問。
我想要一個std::string
本地存儲溢出到免費商店。 std::basic_string
提供一個allocator作爲模板參數,因此它似乎喜歡做的事是寫與本地存儲的分配和使用參數化basic_string
,像這樣:
std::basic_string<
char,
std::char_traits<char>,
inline_allocator<char, 10>
>
x("test");
我試着寫了inline_allocator
類這將按照您的預期工作:它保留10個字節的存儲空間,如果basic_string
需要超過10個字節,則它會調用::operator new()
。我無法讓它工作。在執行上面這行代碼的過程中,我的GCC 4.5標準字符串庫調用inline_allocator
的複製構造函數4次。我不清楚有沒有一種明智的方法來編寫inline_allocator
的拷貝構造函數。
在其他StackOverflow的線程,埃裏克Melski提供此鏈接到一個類中鉻:
http://src.chromium.org/svn/trunk/src/base/stack_container.h
這是有趣的,但它不是一個簡易替換爲std::string
,因爲它包裹std::basic_string
在一個容器中,所以你必須打電話過載operator->()
去std::basic_string
。
我找不到解決此問題的其他解決方案。難道沒有好的解決方案嗎?如果這是真的,那麼std::basic_string
和std::allocator
的概念是否存在嚴重缺陷?我的意思是,這似乎應該是一個非常基本和簡單的使用案例std::basic_string
和std::allocator
。我想std::allocator
這個概念主要是爲游泳池設計的,但我認爲它也應該涵蓋這個概念。
好像C++ 0x中右值引用移動語義,因此可能寫出inline_allocator
,如果字符串庫重新編寫,以便basic_string
使用其分配的移動構造函數,而不是拷貝構造函數。有誰知道這個結果的前景是什麼?
我的應用程序需要每秒鐘創建一百萬個微小的ASCII字符串,所以我最終編寫了基於Boost.Array
的固定長度的字符串類,它工作正常,但這仍然困擾着我。
有趣的問題,+1。 – 2011-03-30 21:44:21
作爲過去與自定義分配器摔跤的人,我非常有興趣聽到權威人士就此主題發表看法。 – 2011-03-30 21:48:56
+1「免費店鋪」。哦,因爲這是一個很好的問題。 – 2011-03-30 22:51:32