k_z*_*r_k 0 c++ memory-leaks vector
我如何在下一个例子中释放mamory.vt.pop_back()删除vt中的元素,但它不释放内存.删除vt [i]不起作用,它给我分段错误.
#include <vector>
#include <unistd.h>
using namespace std;
const int SIZE = 1000000;
class Test
{
public:
Test();
~Test();
private:
int *arr;
};
int main()
{
vector<Test *> vt;
for(int i = 0; i < 100; i++)
vt.push_back(new Test());
sleep(10);
return 0;
}
Test::Test()
{
arr = new int[SIZE];
}
Test::~Test()
{
delete[] arr;
}
Run Code Online (Sandbox Code Playgroud)
您没有存储"测试"对象,而是存储指向这些对象的指针.因此删除只会删除指针.
如果您希望将对象存储在矢量中,则应该输入类型
vector<Test>
Run Code Online (Sandbox Code Playgroud)
这样删除调用实际上运行对象的析构函数.
生成的代码变为:
int main()
{
vector<Test> vt;
for(int i = 0; i < 100; i++)
vt.push_back(Test());
sleep(10);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如评论所述,这还需要一个新的复制构造函数:
Test::Test(const Test& t)
{
arr = new int[SIZE];
for(int i = 0; i != SIZE; i++)
arr[i] = t.arr[i];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6811 次 |
| 最近记录: |