首先,我的动机是做高效的内存管理像计算内核是C的顶部。我试图用std::unique_ptr
和std::vector
,我的代码看起来像下面使用的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();
注意这里在实践中p_data
可以存储在其他一些容器(例如地图)以索引每个分配的阵列根据域名问题尽管如此,我的主要问题是
这里是
std::vector
一个好的选择吗?什么样std::list
/set
其他容器?是否与我的分配方法的根本问题?
假设我用
p_data
对于某些操作后,现在我想以释放原始指针p_data
指向的内存块,什么是最好的做法吗?
如果你'p_data'预计将在不同的容器之间共享,你可以使用'的std :: shared_ptr'代替,然后就完全不使用原始指针。 – Mine
'的std ::的unique_ptr',如果你使用'新双[]'和'喜欢的std :: make_unique'避免这种不匹配。 –
Jarod42
@Mine:根据目前尚不清楚的OP规范,这可能完全是浪费资源。 – Jack