在类构造器中,我需要动态创建一些对象并将其添加到 vector 中。这是我的代码:

ContainerClass::ContainerClass() {
   for (int i = 0; i < limit; i++)
      elements.push_back(SubElement());
}

新的SubElement()是否也一样?我仍然需要将那些SubElement()对象释放到ContainerClass析构函数中吗?

最佳答案

方法1:

如果您有std::vector<SubElement> elements;然后,您将使用elements.push_back(SubElement())
SubElement()在堆栈上创建一个SubElement,然后将拷贝添加到vector中。

您不应在delete的各个元素上调用vector。当vector超出范围时,它们将被销毁并释放。

方法2:

如果您有std::vector<SubElement*> elements;然后,您将使用elements.push_back(new SubElement())
new SubElement()在堆上创建一个SubElement,然后将该元素的地址存储在vector中。

您需要在delete超出范围之前在各个元素上调用vector,否则会造成内存泄漏。仅当您在每个元素上调用delete时,它们才会被破坏并释放。

10-07 22:52