这种解除分配是否正确?
vSize - >动态地,每次运行的值都会改变
//分配
int* xDump = new int(vSize);
int* yDump = new int(vSize);
//取消分配
delete xDump;
delete yDump;
这种解除分配是否正确?
答案 0 :(得分:6)
这是正确的,只要这个:
int* xDump = new int(vSize);
int* yDump = new int(vSize);
不 应该是这样的:
int* xDump = new int[vSize];
int* yDump = new int[vSize];
如果使用方括号,则动态分配数组。在这种情况下,您需要使用delete []关键字。像这样:
delete[] xDump;
delete[] yDump;
如果你真的想要一个动态分配的数组,建议使用std::vector,而不是使用new / delete创建一个。
例如,以下是在您的情况下如何使用向量:
std::vector<int> xDump(vSize);
std::vector<int> yDump(vSize);
// no need for delete[]
您应该避免拥有指针(指向堆上分配的内存的指针),而是在必要时尝试在代码中使用smart pointers或containers。由于smart pointers和containers都利用了非常有用的RAII模式,这将减少程序员错误(即减少内存泄漏的可能性)并增加异常安全性。
答案 1 :(得分:3)
是的,这是正确的。没问题。
答案 2 :(得分:3)
您似乎正在尝试分配int
s的数组,在这种情况下它应该是:
int* xDump = new int[vSize];
int* yDump = new int[vSize];
和
delete [] xDump;
delete [] yDump;
答案 3 :(得分:0)
如果您打算删除一个在这里似乎不是这种情况的数组,则需要调用delete []。但是如果参数vSize在方括号[]中(可能你想要这个?)然后你肯定应该调用delete []
答案 4 :(得分:0)
这个结构:
int* xDump = new int(vSize);
相当于:
int* xDump = new int;
*xDump = vSize;
......答案是肯定的,这是正确的,因为你没有分配数组。