IDENTITY_MATRIX/ZERO_MATRIX:它们分配吗?

identity_matrix/zero_matrix: do they allocate?

本文关键字:MATRIX 分配 ZERO IDENTITY      更新时间:2023-10-16

矩阵类identity_matrixzero_matrixALLOC作为第二个参数的模板。但是他们真的分配内存吗?

no,它们不会分配内存,如这里和这里所示。我认为该文档具有误导性:分配器不用于静态zero_one_元素的初始化,只是类型T的结构:

template<class T, class ALLOC>
const typename zero_matrix<T, ALLOC>::value_type zero_matrix<T, ALLOC>::zero_ = T(/*zero*/);
...
template<class T, class ALLOC>
const typename identity_matrix<T, ALLOC>::value_type identity_matrix<T, ALLOC>::zero_ = T(/*zero*/);
template<class T, class ALLOC>
const typename identity_matrix<T, ALLOC>::value_type identity_matrix<T, ALLOC>::one_ (1); // ISSUE: need 'one'-traits here

但是,使用Typedefs size_typedifference_type是公共接口的一部分,为了保持一致,使用ALLOC::size_typeALLOC::difference_type(而不是"常规" std::size_tstd::ptrdiff_t)。这是通过以下更改完成的。