gpt4 book ai didi

c++ - 创建新结构、插入列表、重新使用指针、在 vector 中返回……是否以及如何删除?

转载 作者:太空宇宙 更新时间:2023-11-04 15:00:37 25 4
gpt4 key购买 nike

在我编写的用于在答案中演示算法的 C++ 代码中,我使用 new 在函数中创建结构,将它们存储在列表中,将它们移动到 vector 中,然后返回 vector :

struct my_struct {int a, b, c;};

std::vector<my_struct> myFunction(...) {
std::list<my_struct> my_list;
std::list<my_struct>::iterator current = my_list.begin();
std::vector<my_struct> my_vector;
my_struct *new_struct = nullptr;

while (...) {
...
if (!new_struct) {
new_struct = new my_struct;
new_struct->a = ...
}
...
if (new_struct) {
new_struct->b = ...
my_list.insert(current, *my_struct);
my_struct = nullptr;
}
...
if (...) {
current->c = ...
my_vector.push_back(*current);
current = my_list.erase(current);
}
...
}
return my_vector;
}

它可以编译并且似乎可以正常工作,但是我更习惯于 JavaScript,并且这段代码感觉就像是翻译后的 JavaScript;我特别想知道我是否正在造成内存泄漏,以及我是否必须删除调用函数中的结构(以及如何删除)。

最佳答案

是的,你有内存泄漏。如果调用new命令,以后需要调用delete命令来释放new分配的内存。

所以,在这个声明中:

my_list.insert(current, *my_struct);

你确实复制了*my_struct的内容,没有得到它的所有权。所以,在下面的语句中:

my_struct = nullptr;

你刚刚遇到内存泄漏。

要解决这个问题,请更改您的设计以使用智能指针,例如 unique_ptr,或者更好的是,根本不使用指针,而只使用普通对象:

my_struct new_struct;

关于c++ - 创建新结构、插入列表、重新使用指针、在 vector 中返回……是否以及如何删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46981231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com