2017-04-03 9 views
1

これはポインタのベクトルを含むことができブーストは配列のベクトルに対してスマートポインタを持っていますか?

double **a; 
a = new (double*)[100]; 
for (int i=0; i<100; ++i) { 
    a[i] = new double[99]; 
} 

ptr_vectorのようなデータを保持することです。しかし、配列を解放するためのカスタマイズされたデリゲーターをサポートしているようには見えません。

1つの解決策は、99個の2倍を管理する新しいクラスを作成し、100個のクラスを保持するためにptr_vectorを使用できることです。

答えて

2

最高の方法は、標準ライブラリを使用することです。 std::vectorは、メモリ管理を心配する必要がなくなり、ベクトルのサイズを設定する必要がありません。

std::vector<std::vector<double>> a; 

またstd::unique_ptrを使用することができますが、動的なメモリを割り当てることがより面倒です。しかし、オブジェクトがスコープ外で消滅/実行された場合、std :: unique_ptrはスマートポインタであるため、メモリは自動的に割り当てが解除されます。

std::unique_ptr<std::unique_ptr<double>[]> a(new std::unique_ptr<double>[100]); 
    for (i=0; i <100; i++) 
     a[i] = std::unique_ptr<int[]>(new int[99]); 

上記の作品が、それは、ポインタを使用して、自動的にメモリを割り当て、割り当て解除からあなたを救うことですstd::unique_ptrの意図を破ります。

関連する問題