我有这样的结构:
class Items
{
private:
struct item
{
unsigned int a, b, c;
};
item* items[MAX_ITEMS];
}
Run Code Online (Sandbox Code Playgroud)
假设我想'删除'一个项目,如下所示:
items[5] = NULL;
Run Code Online (Sandbox Code Playgroud)
我后来在同一个地方创建了一个新项目:
items[5] = new item;
Run Code Online (Sandbox Code Playgroud)
我还需要打电话delete[]来清理它吗?或者不需要这样,因为items[]在编译之前已知数组的边界?
将该指针设置为NULL有效还是应该在那里调用delete?
int main()
{
myClass obj;
.... /* doing things */
....
delete &obj; /* illegal */
}
Run Code Online (Sandbox Code Playgroud)
让我们假设myClass是一个适当的C++类,其中包含所有内容.现在,我知道这是非法的,这个程序会在运行时崩溃.第一件事就是代码试图删除一个堆栈对象,然后在范围完成之后它再次被破坏.我想知道这种非法行动的内部情况.即删除会发生什么,它会调用析构函数吗?对你来说可能看起来很疯狂,但请帮助我理解.
int main()
{
int x = 3;
int* y = new int(4);
y = &x;
cout << y;
delete y;
}
Run Code Online (Sandbox Code Playgroud)
它显示以下错误:
'./a.out'中的错误:free():无效的指针:0x00007ffde8e1c0364
0x7ffde8e1c0364已中止