问题描述
- 这个vector对象的资源该如何释放呢?
-
下面这个程序main函数有内存泄漏,运行内存检测工具valgrind可以看到(程序可以正常运行的),该如何释放vector的内存资源呢?
#include
#include
using namespace std;class yitem
{
public:
yitem(const char *s1):m_data(s1) { m_str = new string("abc"); }
~yitem(void) { delete m_str; }
string & get_data() { return m_data; }private:
string m_data;
string *m_str = nullptr;
};int main()
{
vector v1;
yitem a("A");
v1.push_back(a);printf("okn");
return 0;
}
解决方案
yitem的拷贝构造函数要实现,处理好指针。
解决方案二:
用delete或者free,具体google下,很简单的。
解决方案三:
问题就还是内存泄漏啊,下面代码我都试过,都一样,而且不见得泄漏少些
//1:
delete &v1;
//2:
//v1.clear();
//3:
/*
for (auto it=v1.begin(); it!=v1.end(); it++)
{
delete &(*it);
}*/
解决方案四:
此程序指针只有一个m_str,在析构函数中释放,看来应该没有什么问题,但总是报告内存泄露,加什么clear啊,delete都一样,而且更多(都是能正常运行的,没有异常抛出)
时间: 2024-10-02 13:43:11