向量调整大小抛出bad_alloc会使原始数据无效吗?

时间:2017-11-22 15:23:10

标签: c++ vector stl containers boost-interprocess

std::vector::resize()引发std::bad_alloc例外后,原始数据是否仍在std::vector对象中有效且可访问?

答案是否适用于其他分配器,例如如果boost::interprocess::allocator用作分配器,并且boost::interprocess::bad_alloc被抛出?

2 个答案:

答案 0 :(得分:5)

note是例外安全的。

  

如果抛出异常,则此函数无效(强异常保证)。

std::vector::resize规范并未提及对分配器的任何特定要求,无论您提供的分配器如何,都必须保留。

答案 1 :(得分:3)

  

原始数据是否仍然有效且可在'$&<br/><br/>'对象中访问?

是的,selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"xpath","selector":"/html/body/div[2]/nav/ul/li[2]"} (Session info: chrome=62.0.3202.94) (Driver info: chromedriver=2.33.506120 (e3e53437346286c0bc2d2dc9aa4915ba81d9023f),platform=Windows NT 10.0.15063 x86_64) 具有强大的异常保证(除了下面提到的情况)。 §26.3.11.3/15 vector capacity [vector.capacity]

  

如果除非由非CopyInsertable T的移动构造函数抛出异常,则不会产生任何影响。

保证与指定的分配器类型无关;所以它总是如此。