identity_matrix/zero_matrix: do they allocate?

51 views Asked by At

matrix classes identity_matrix and zero_matrix are templates with ALLOC as a second parameter. But do they really allocate memory?

1

There are 1 answers

1
ead On BEST ANSWER

No, they don't allocate memory, as can be seen here and here. I think the documentation is misleading: allocators are not used for initialization of static zero_ or one_ elements, just the constuctors of the type 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

However, the typedefs size_type and difference_type are part of the public interface and in order to be consistent, ALLOC::size_type and ALLOC::difference_type are used (instead of the "usual" std::size_t and std::ptrdiff_t). This was done with the following change.