成员函数at()
的例外情况,我不能想到由std::vector
函数引发的异常,但是由其分配器或其元素构造函数和赋值运算符引发。因此,在实现您自己的分配器时,异常中立可能是一个非常理想的保证。例如,您可以预先分配所有需要的内存,然后依靠分配器的noexcept保证传播到其容器。是std :: vector异常中立?
C++标准是否提供std::vector<T,Alloc>
的异常中立性?
成员函数at()
的例外情况,我不能想到由std::vector
函数引发的异常,但是由其分配器或其元素构造函数和赋值运算符引发。因此,在实现您自己的分配器时,异常中立可能是一个非常理想的保证。例如,您可以预先分配所有需要的内存,然后依靠分配器的noexcept保证传播到其容器。是std :: vector异常中立?
C++标准是否提供std::vector<T,Alloc>
的异常中立性?
除了内存分配,还有一种情况,其中vector
本身也会抛出异常:at()
成员函数。如果向量的类的构造函数和赋值运算符(这将作为修改向量的一部分被调用)不会抛出任何异常,则保证不会抛出任何异常,并且没有超出范围的呼叫at()
。
有没有涉及'operator ='的怪癖? – Yakk
载体上的'operator ='属于“内存分配”类别。 –
“你可能会分配所有需要的内存”如果你不能这样做呢? – Arunmu
准确定义这对于你来说意味着什么“异常中立” –
@Arunmu如果你不能这样做,那么你提前投掷。 –