如何解决如果我在函数中使用指针来填充列表,是否需要在c ++中删除该函数末尾的指针?
如果在函数中使用指针填充列表,是否必须在函数末尾删除该指针,否则列表的析构函数将在c ++中完成工作?
例如:
void populateList() {
Human* human;
List<Human> myList;
for (int i = 0; i < 5; ++i) {
human = new Human();
myList.push_back(*human);
}
}
我应该删除该函数末尾的指针,还是不需要它,因为它不是内存泄漏?
解决方法
在这一行:
myList.push_back(*human);
您正在制作human
指针所指向的动态分配对象的副本,因此myList
析构函数只会清除该副本。您确实需要手动释放human
指向的动态分配的内存,以避免泄漏该内存。
但是,在这种情况下,似乎根本没有理由使用new
动态分配内存。您可以只创建一个本地Human
并将其添加到myList
中。这样就不会有内存泄漏的问题了
是没有动态分配的,并且所有对象超出范围都会被正确清理。
您无需在此处使用指针,只需执行以下操作即可:
void populateList() {
List<Human> myList;
for (int i = 0; i < 5; ++i) {
Human human; //if the constructor of human creates the same thing every time,you could also put this line before the for loop
myList.push_back(human);
}
}
在c ++中声明变量也会对其进行构造。
您正在做的是创建一个指针,而不是创建Human
的新实例并使该指针指向该实例。比起基本上将其复制到列表,因为您只给列表提供了一个副本。即使您愿意,它也无法删除您的指针,因此您应该删除人工实例。如果您确实坚持使用指针,则应该这样做:
void populateList() {
Human* human;
List<Human> myList;
for (int i = 0; i < 5; ++i) {
human = new Human();
myList.push_back(*human);
delete human;
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。