在类构造器中,我需要动态创建一些对象并将其添加到 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
时,它们才会被破坏并释放。