5

との間const_multi_array_refの関係は次のとおりです。multi_array_refmulti_array

  • multi_array_refから派生const_multi_array_ref
  • multi_arrayから派生multi_arry_ref

const_multi_array_refただし、とのデストラクタmulti_array_refは非仮想です。実際、明示的に実装されたデストラクタはありません。1つだけmulti_arrayあります。これは、次の使用法が推奨されていないことを意味しますか?

multi_array_ref<float, 2> * = new multi_array<float, 2>(extents[3][3]);

もしそうなら、なぜですか?

4

1 に答える 1

2

multi_arrayライブラリ クラスは動的ポリモーフィズム用に設計されていません。それらには仮想関数がないため、デストラクタも仮想にするのは合理的ではないようです。これは一般的な STL に似た設計でmulti_array_refあり、データを所有する場合と所有しない場合の統合インターフェイス アダプターとして使用されます。

使用例は強くお勧めしmulti_arrayません。デストラクタがdelete呼び出し時に実行されないため、メモリ リークが発生します。

multi_arrayただし、への参照またはポインタを介してインスタンスにアクセスすることは安全multi_array_refです。

于 2012-08-16T10:42:27.207 に答える