我經常需要處理C++中動態分配的數組,因此依賴Boost for scoped_array,shared_array等。通過Stroustrup's C++11 FAQ和C++11 Reference Wiki的閱讀後,我無法找到由C++ 11標準提供的這些動態數組包裝的合適替代品。有沒有我忽略的東西,還是我必須繼續依靠Boost?C++ 11是否擁有動態分配數組的包裝器,如Boost的scoped_array?
非常感謝您的幫助!
我經常需要處理C++中動態分配的數組,因此依賴Boost for scoped_array,shared_array等。通過Stroustrup's C++11 FAQ和C++11 Reference Wiki的閱讀後,我無法找到由C++ 11標準提供的這些動態數組包裝的合適替代品。有沒有我忽略的東西,還是我必須繼續依靠Boost?C++ 11是否擁有動態分配數組的包裝器,如Boost的scoped_array?
非常感謝您的幫助!
有一個unique_ptr
的專業化,像unique_ptr<T[]>
。
#include <iostream>
#include <memory>
struct test
{
~test() { std::cout << "test::dtor" << std::endl; }
};
int main()
{
std::unique_ptr<test[]> array(new test[3]);
}
當您運行它時,您將收到此消息。
test::dtor
test::dtor
test::dtor
如果你想使用shared_ptr
,你應該使用std::default_delete<T[]>
的缺失者,因爲它沒有有一個像shared_ptr<t[]>
。
std::shared_ptr<test> array(new test[3], std::default_delete<test[]>());
只要矢量用作數組包裝,如果您使用任何合適的智能指針與矢量作爲內部對象,該怎麼辦?
如果元素類型不是可複製構建的,則vector :: emplace_back()和vector :: push_back()將不起作用。我不知道初始化初始化列表,但我懷疑有同樣的問題。 – Syncopated 2015-03-27 10:20:59
是的,你是對的,在這種情況下,我們需要用額外的包裝來包裝這些不可複製的東西,這往往是一些矯枉過正:) – 2015-03-27 12:06:21
謝謝,就是我在找的東西!我不知道有專門的陣列。 – 2011-12-24 19:21:57