如果函数给定值,那么动态结构是否需要删除



如果这个问题很难理解,我很抱歉,但我不知道该怎么说。

举个例子,我有一个像下面这样的结构,

struct Days {
int counter;
};

总的来说,我有

Days *d = new Days;
d.counter = 0;

如果我在主内这样的循环中使用d

do {
int num = rand()%900+1000;
d = add(d, num);
} while(user decides to continue}
delete d;

其中函数add如下

Days *add(Days *d, int num) {
Days *temp2 = new Days;
temp2.counter = 0;
if (d.counter > 0)
temp2.counter = d.counter;
temp2.counter += num;
return temp2;
]

我需要在Do-while循环的每次迭代后删除d吗?如果是这样,它会像这个一样在if statement中的add函数中吗

if (d.counter > 0) {
temp2.counter = d.counter;
delete d;
}

或者它主要是在循环中?

实际上,您不需要自己分配任何东西。

在主函数中,只需将变量声明为:

// Create a Days object with counter initialized to zero
Days d {0};

然后,您可以这样定义add函数:

void add(Days & d, int num)
{
d.counter += num;
}

或者,如果你真的想使用指针而不是引用:

void add(Days * d, int num)
{
d->counter += num;
}

最后,你可以这样称呼它:

do
{
int num = whatever();
add(d, num);
// add(&d, num); if you used the pointer version
}
while(condition);

如果我可以给你一个建议,因为add()应该对Days对象进行操作,所以将其作为Days的成员函数可能是有意义的,这样你就不需要传递Days作为参数,也不需要去掉指针/引用的东西^^

在这种情况下,

add(d, num);

将变成:

d.add(num);

最新更新