如果我在函数中使用指针来填充列表,是否必须在函数末尾删除该指针,或者列表的析构函数将在 C++ 中完成这项工作?
例如:
void populateList() {
Human* human;
List<Human> myList;
for (int i = 0; i < 5; ++i) {
human = new Human();
myList.push_back(*human);
}
}
Run Code Online (Sandbox Code Playgroud)
我应该删除函数末尾的指针,还是不需要它,因为它不是内存泄漏?
在这一行:
myList.push_back(*human);
Run Code Online (Sandbox Code Playgroud)
您正在制作human指针指向的动态分配对象的副本,因此myList析构函数只会清理该副本。您确实需要手动释放 指向的动态分配的内存human,以避免泄漏该内存。
但是,在这种情况下,似乎根本没有理由动态分配内存new。您可以创建一个本地Human并将其添加到myList. 然后没有内存泄漏问题,因为没有动态分配,并且所有对象在超出范围时都会被正确清理。