1
是否有可能在禁止例外情況下使用allocate_shared
(fno-exceptions
),並且分配器返回nullptr
而不是拋出分配失敗?這意味着有一個圍繞allocate_shared
的包裝,當內存分配失敗時返回一個空的shared_ptr
。我正在尋找能夠與GCC(libstdC++),Clang(libC++)和MSVC一起工作的東西。allocate_shared當例外情況被禁止時
當前想法:對控制塊的大小設置一些上限,並且如果可以預先分配足夠的內存(對於控制塊加對象),則只調用allocate_shared
。
您從文檔中推斷得太多。標準分配器不應該返回'nullptr',所以'allocate_shared()'不能解決這種情況。在實踐中,您將獲得非法訪問而不是空的'shared_ptr'。 –
'allocate_shared()'不應該考慮到這種情況。我想,你想確定的是,構造函數永遠不會被指向空指針。那麼,'allocate_shared()'將使用'allocator_traits :: construct()'。所以只需要爲你的自定義分配器專門設置'allocator_traits',你就會好起來的。 –
cdonat
我想過這樣做,但根據N4140§20.8.2.2.6:'allocate_shared' _分配適合於類型T的對象的內存,並通過放置新表達式構建一個對象 ':: new(pv )T(std :: forward(args)...)'_。 –