这个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("ok\n");
return 0;
}

4个回答

yitem的拷贝构造函数要实现,处理好指针。

zhuwt2008
zhuwt2008 运行报告中说:total heap usage: 4 allocs, 6 frees, 78 bytes allocated...ERROR SUMMARY: 5 errors from 5 contexts (suppressed: 3 from 3)这很明白了,我就是一直没有看,以为不用valgrind没有报错就是没有错了,其实有内存重释放的错误,在这里记一下,方便今后回顾
5 年多之前 回复
zhuwt2008
zhuwt2008 不过内存没有泄漏,而是内存重释放
5 年多之前 回复
zhuwt2008
zhuwt2008 呵呵,太好了,果然与拷贝构造函数有关,多谢你提醒!
5 年多之前 回复

用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都一样,而且更多(都是能正常运行的,没有异常抛出)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐