C++ 删除包含字符串向量的对象时内存泄漏
我有以下类,C++ 删除包含字符串向量的对象时内存泄漏,c++,memory-management,valgrind,C++,Memory Management,Valgrind,我有以下类,Tuple: class Tuple { public: Tuple(){ } Tuple(vector<string> newValueList){ this->values = newValueList; } ~Tuple() { } private: vector<string> values; } 好的,在你的评论之后,我想出了解决办法 我有一个
Tuple
:
class Tuple {
public:
Tuple(){
}
Tuple(vector<string> newValueList){
this->values = newValueList;
}
~Tuple() {
}
private:
vector<string> values;
}
好的,在你的评论之后,我想出了解决办法 我有一个
向量
,它疯狂地导致了内存泄漏。我检查了整个代码,将Tuple*
的每个实例都更改为Tuple
,并进行了其他必要的更改,以确保代码仍然有效。这样做之后,我对Tuple
的析构函数没有任何问题。谢谢你的意见
Tuple* Tuple::duplicate(string value, int count, bool pull)
将Tuple*更改为Tuple也有帮助,因为您将从动态/堆分配转换为堆栈分配。一旦堆栈对象超出范围,就会自动调用析构函数。如何创建
元组
对象?仅此代码本身没有问题。尽管当您已经在成员函数中时,不需要显式设置此
的值^^^^可以是值=新值列表
。虽然这显然不是问题所在。您使用new
分配Tuple
,并且可能不会删除它。为什么要首先堆分配它?“当我调用析构函数时……”你不调用析构函数(新的位置)。要么删除动态分配并由它为您触发,要么自动实例在离开作用域时触发。这就引出了Yuushi的评论。您在哪里删除要返回的tuple
?Valgrind将有一个内存来自何处的分配堆栈跟踪,一直返回到main()
,所以您为什么不看一下/post。
Tuple* Tuple::duplicate(string value, int count, bool pull){
Tuple* returnTuple = 0;
vector<string> newValueList;
for (size_t i = 0; i < this->values.size(); i++) {
if (((int)i == count)&&!pull)
continue;
else{
newValueList.push_back(this->values[i]);
}
}
returnTuple = new Tuple(newValueList);
return returnTuple;
}
Tuple* Tuple::duplicate(string value, int count, bool pull)