2016-11-14 67 views
2

成员函数at()的例外情况,我不能想到由std::vector函数引发的异常,但是由其分配器或其元素构造函数和赋值运算符引发。因此,在实现您自己的分配器时,异常中立可能是一个非常理想的保证。例如,您可以预先分配所有需要的内存,然后依靠分配器的noexcept保证传播到其容器。是std :: vector异常中立?

C++标准是否提供std::vector<T,Alloc>的异常中立性?

+0

“你可能会分配所有需要的内存”如果你不能这样做呢? – Arunmu

+1

准确定义这对于你来说意味着什么“异常中立” –

+0

@Arunmu如果你不能这样做,那么你提前投掷。 –

回答

1

除了内存分配,还有一种情况,其中vector本身也会抛出异常:at()成员函数。如果向量的类的构造函数和赋值运算符(这将作为修改向量的一部分被调用)不会抛出任何异常,则保证不会抛出任何异常,并且没有超出范围的呼叫at()

+0

有没有涉及'operator ='的怪癖? – Yakk

+0

载体上的'operator ='属于“内存分配”类别。 –