vector容器中存放自定义类的动态指针对象的地址。我们可以通过逐个调用自定义类的析构函数完成析构过程。
#include<iostream>
#include<vector>
using namespace std;
class A
{
public:
A(int a)
{
this->m_a = a;
cout << "A()构造函数:" << this->m_a << endl;
}
~A()
{
cout << "A()析构函数:" << this->m_a << endl;
}
public:
int m_a;
private:
//static int i;
};
//int A::i = 1;
int main()
{
// 容器vector中,保存着动态的对象
vector<A*> vctor_a;
for (int i = 0; i < 5; i++)
{
A* a = new A(i);
vctor_a.push_back(a);
}
// 析构掉容器中的,各个动态对象
for (int i = 0; i < 5; i++)
{
delete vctor_a[i];
vctor_a[i] = nullptr;
}
return 0;
}
如果自定义的类中,还定义有动态的二维数组,则需要先释放动态二维数组,再释放容器中的自定义类。
class A
{
public:
A(int a)
{
this->m_a = a;
cout << "A()构造函数:" << this->m_a << endl;
}
~A()
{
cout << "A()析构函数:" << this->m_a << endl;
}
public:
int m_a;
int** matrix;
int m; int n; // matrix是m行n列的矩阵
private:
//static int i;
};
//int A::i = 1;
int main()
{
// 容器vector中,保存着动态的对象
vector<A*> vctor_a;
for (int i = 0; i < 5; i++)
{
A* a = new A(i);
a->matrix = new int*[a->m];
for (int i = 0; i < a->m; i++)
{
a->matrix[i] = new int[a->n];
}
vctor_a.push_back(a);
}
// 先析构掉各个容器中的动态二维数组
for (int i = 0; i < vctor_a.size(); i++)
{
A* tmp_a = vctor_a[i];
for (int j = 0; j < tmp_a->m; j++)
{
delete[] tmp_a->matrix[j];
tmp_a->matrix[j] = nullptr;
}
delete[] tmp_a->matrix;
tmp_a->matrix = nullptr;
}
// 析构掉容器中的,各个动态对象
for (int i = 0; i < vctor_a.size(); i++)
{
delete vctor_a[i];
vctor_a[i] = nullptr;
}
}