2

マトリックス クラスidentity_matrixとは、2 番目のパラメーターとしてのzero_matrixテンプレートです。ALLOCしかし、本当にメモリを割り当てているのでしょうか?

4

1 に答える 1

2

いいえ、ここここで見られるように、メモリを割り当てません。ドキュメントは誤解を招くと思います: アロケータは静的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

ただし、typedefsize_typedifference_typeはパブリック インターフェイスの一部であり、一貫性を保つために(「通常の」との代わりに)ALLOC::size_typeとが使用されます。これは、次の変更で行われました。ALLOC::difference_typestd::size_tstd::ptrdiff_t

于 2017-12-11T06:49:00.543 に答える