如何释放具有数组指针结构的向量?

时间:2016-09-19 08:01:14

标签: c++ arrays vector struct

我对矢量发布有一些疑问。 释放矢量存储,他们说交换是释放矢量的最佳方式

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;当用作没有指针的参数时会出现问题。

2 个答案:

答案 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来管理获取/释放资源并防止内存泄漏。