我对矢量发布有一些疑问。 释放矢量存储,他们说交换是释放矢量的最佳方式
vector<tempObject>().swap(tempVector);
但是,如果vector的struct具有多样数组,那么如何释放这个向量?
struct st{
int *arr;
st(int _size){
arr = (int *)malloc(_size * sizeof(int));
}
}
vector<st> vec_st;
// pushback data
1
vec_st.clear();
2
for(int i =0; i < vec_st.size(); i++){
free(vec_st(i).arr);
}
是第一种方式吗?或者必须使用第二种方式?或其他......?
我的项目使用JNI在android上运行。这就是为什么我徘徊如何高效释放以避免内存问题。 请帮帮我....
PS。我不想破坏者。曲子&#39;当用作没有指针的参数时会出现问题。
答案 0 :(得分:0)
首先,为什么还在使用现代C ++的malloc()和free()?而不是int *使用带有reserve()的向量,resize()或只使用其初始化ctors之一。您可以使用data()方法到达向量内的连续内存。此外,如果您必须使用结构,请考虑给它一个ctor和dtor(结构与类相同,但默认情况下所有成员都是公共的)。
答案 1 :(得分:0)
调用vector vec_st; 你正在创建 st 对象的 vector ,你在这里使用 st 的默认构造函数,所以我认为定义构造函数st :: st(int _size)没有意义(你正在调用st :: st())。
无论如何,您可以使用析构函数释放内存。 使用malloc / free,new / delete现在已经过时了。相反,使用shared_ptr或unique_ptr来管理获取/释放资源并防止内存泄漏。