gpt4 book ai didi

c++ - 使用析构函数是只删除动态分配的数组还是所有数组?

转载 作者:行者123 更新时间:2023-11-27 23:42:16 31 4
gpt4 key购买 nike

我是 C++ 的新手,所以我在内存管理方面苦苦挣扎。我知道当我们有一个指向数组的指针时,这意味着它是动态创建的,所以我应该稍后在我的析构函数中删除它。但是如果我们有一个普通数组怎么办,我是否也需要在这个普通数组的析构函数中包含一个 delete 语句?或者程序会自动执行?例如,我有一个像这样的普通数组int myArray[];在我的析构函数中,我应该包括这个:删除[] myArray;?提前致谢,

最佳答案

But what if we have a normal array, do I need to include a delete statement in the destructor for this normal array too? or the program will do that automatically? for example, I have a normal array like this int myArray[]; and in my destructor, should I include this: delete[] myArray; ?

没有。如果您不new[] 一个数组,那么您不需要delete[] 它。其他一切都是自动完成的。这就是为什么使用 std::arraystd::vector 等如此出色:无需编写 new[]您使用它们,所以您不必担心您可能忘记了 delete[]

"I know that when we have a pointer to an array, it means it is dynamically created"

这是不正确的。您基本上可以使用指向任何内容的指针,包括堆栈变量。动态分配通常会给你一个指针(这可能是混淆的根源)但并不是每个指针都来自动态分配。考虑一下:

void foo()
{
int a;
int* b = &a; // No dynamic allocation.
}

同样,由于这里没有new,所以也不应该有delete

关于c++ - 使用析构函数是只删除动态分配的数组还是所有数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53635975/

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