是否可以在禁止异常的环境中使用allocate_shared
(fno-exceptions
),并且分配器返回nullptr
而不是抛出分配失败?这意味着在allocate_shared
周围有一个包装器,当内存分配失败时返回空shared_ptr
。我正在寻找适用于GCC(libstdc ++),Clang(libc ++)和MSVC的东西。
当前的想法:在控制块的大小上设置一些上限,如果可以预先分配足够的内存(对于控制块加对象),则只调用allocate_shared
。
答案 0 :(得分:0)
我猜,你的构造函数永远不会抛出,因为你处于一个"没有例外" -environment。那么对你的分配器来说也是如此。然后根据this documentation,allocate_shared()
不会抛出。空shared_ptr
与shared_ptr
完全相同,因此无需在此处创建任何包装或其他内容。
所以是的,你可以使用它,虽然我建议你试着去做那个"没有例外" - 限制。我从来没有在任何地方找到这种限制的真正理由。