簡體   English   中英

是否有std :: unique_ptr的用例 <std::array<T,N> &gt;

[英]Is there a use case for std::unique_ptr<std::array<T,N>>

我遇到過類似的東西:

using arr_t=std::array<std::array<std::array<int,1000>,1000>,1000>;
std::unique_ptr<arr_t> u_ptr;

顯然,使用唯一指針來克服stackoverflow問題。 有沒有使用前面的代碼而不只是使用std::vector 是否存在std::unique_ptr<std::array<T,N>>的真實用例?

上面的代碼生成一個十億個元素的連續緩沖區,使用[]訪問權限可以將元素作為三維1000面元素。

向量向量的向量將是由指針和所有權語義鏈接的一大堆非連續緩沖區。

我懷疑你在暗示

using u_ptr=std::vector<std::array<std::array<int,1000>,1000>>;

然后在創建arr_t大小調整為1000 這在handle對象中有額外的2指針開銷的適度成本。 它還允許變化的大小,這意味着確保它是固定大小的,這是用戶代碼必須確保的。 你想要阻止一堆方法,基本上所有unique_ptr都不公開,以確保安全,或審計你的代碼不使用它們中的任何一個。

其中一些操作可能非常昂貴; .push_back({})會重新分配一個千兆字節。

現在,也許你打算不會打電話給那個; 但是如果你有處理向量的通用代碼,你必須審核所有這些代碼以確保它們都不會執行這些操作。 對於無法調整大小的vector ,不可能有一個非const句柄,例如,此時沒有roll-your-own-span-class。

我們可以阻止我們不希望使用私有繼承和using語句公開的方法,但是此時我們最終完成了大部分工作以回到unique_ptr解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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