作为previous question的续篇,我想问一下我在以下代码中做错了什么。

该代码例如

void myclass1::myfun()
{
myclass2* newVar = new myclass2();
/* other code and stuff */
myvector.push_back(newVar); // myvector is a member of myclass1 and is a std::vector<myclass2*>
delete newVar;
}


但是当我运行它时,除非我注释掉delete行,否则myvector返回空。

我究竟做错了什么?

最佳答案

如前所述,释放内存后,您将无法访问或更改内存。您必须注意在析构函数中删除对象(或其他函数)。这是一个可以做到的片段:

// this function adds the object
`void MyClass1::AddFun()
{
  myClass2* Ptr = new myClass2();  // create new object via new-operator
  myvector.push_back(Ptr);
}

// this function clears the entire vector
void MyClass1::ClearAllContent()
{
  while (myvector.empty() == false)
  {
    delete myvector[myvectory.size() - 1];  // free the last object in your vector
    myvector.pop_back();                    // pop_back reomves the "empty"-pointer
  }
}

关于c++ - 正确使用新的/删除的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7107330/

10-11 19:08