Des*_*tor 1 c++ arrays variable-assignment delete-operator
这看起来很简单,但我的朋友和我一起辩论,下面的程序会调用UB.但我认为他是不正确的.考虑以下计划:
#include <iostream>
int main()
{
int* p=new int[3]();
int* q=p;
for(int i=0;i<3;i++)
std::cout<<q[i]<<' ';
delete[] q;
std::cout<<'\n';
}
Run Code Online (Sandbox Code Playgroud)
这个程序的行为是否定义得很好?如果我写delete [] p会发生什么?而不是删除[] q; ?有效吗?
是的,该计划定义明确.首先,创建一个分配给新分配的内存的指针.
int* p=new int[3]();
Run Code Online (Sandbox Code Playgroud)
然后,您创建指向该内存的另一个指针
int* q=p;
Run Code Online (Sandbox Code Playgroud)
然后使用该指针将数据分配到该内存中.您删除的记忆是指针后,q这是相同的p这是好的.该计划返回,一切顺利
delete不关心你使用什么变量.重要的是指针指向的内存是用new你创建的,你只在内存上调用一次delete.