まず、私の動機は、計算カーネルのようなCの上で効率的なメモリ管理を行うことです。そして、私はここで練習p_data
でunique_ptrと適切なコンテナを使用してメモリ管理を行う
// my data container
typedef std::unique_ptr<double> my_type;
std::vector<my_type> my_storage;
// when I need some memory for computation kernel
my_storage.push_back(my_type());
my_storage.back.reset(new double[some_length]);
// get pointer to do computational stuff
double *p_data=my_storage.back.get();
下記の注意事項は、ドメインの問題に応じて、それぞれに割り当てられた配列のインデックスを作成するには、いくつかの他の容器(例えばマップ)に格納することができるように私のコードが見え、
std::unique_ptr
と
std::vector
を使用しようとしましたそれにもかかわらず、私の主な質問は
ここには
std::vector
がいいですか?std::list
/set
のような他の容器はどうですか?割り当て方法に根本的な問題はありますか?私はいくつかの操作のために
p_data
を使用した後は仮定し、今私は生のポインタ
p_data
が指すメモリチャンクを解放したい、ここでのベストプラクティスは何ですか?
あなたは 'p_data'が異なるコンテナ間で共有されることが予想され、あなたの代わりに'のstd :: shared_ptr'を使用することができ、その後、あなたはまったく生のポインタを使用しない場合。 – Mine
'std :: unique_ptr'、 'new double []'を使い、この不一致を避けるために 'std :: make_unique'を好むならば。 –
Jarod42
@Mine:これは明らかに不明な問題のOP仕様に従って、リソースの無駄になることがあります。 – Jack