C++ 这种解除分配正确吗?

C++ 这种解除分配正确吗?,c++,arrays,C++,Arrays,这种解除分配正确吗 vSize->动态更改每次运行的值 //分配 int* xDump = new int(vSize); int* yDump = new int(vSize); //解除分配 delete xDump; delete yDump; 此解除分配正确吗?是的,正确。没有问题。这是正确的,只要: int* xDump = new int(vSize); int* yDump = new int(vSize); 不是应该是这样的: int* xDump = new int[vS

这种解除分配正确吗

vSize->动态更改每次运行的值

//分配

int* xDump = new int(vSize);
int* yDump = new int(vSize);
//解除分配

delete xDump;
delete yDump;

此解除分配正确吗?

是的,正确。没有问题。

这是正确的,只要:

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;
编辑: 如果您确实想要动态分配的数组,建议使用一个,在创建一个时使用new/delete

例如,以下是在您的情况下如何使用向量:

std::vector<int> xDump(vSize);
std::vector<int> yDump(vSize);

// no need for delete[]
std::vector xDump(vSize);
std::向量yDump(vSize);
//无需删除[]

您应该避免拥有指针(指向堆上分配的内存的指针),而是在必要时尝试在代码中使用或。作为两者,并利用非常有用的模式,这将减少程序员错误(即减少内存泄漏的机会)并提高异常安全性。

您似乎试图分配一个
int
s数组,在这种情况下,它应该是:

int* xDump = new int[vSize];
int* yDump = new int[vSize];


如果要删除一个数组,则需要调用delete[],这里的情况似乎不是这样。但是,如果参数vSize在方括号[](您可能想要这个?),那么您肯定应该调用delete[]

这个构造:

int* xDump = new int(vSize);
相当于:

int* xDump = new int;
*xDump = vSize;

…答案是肯定的,它是正确的,因为您没有分配数组。

是的,它是正确的。你有什么问题吗?(看起来你有一个)答案取决于你如何处理这两个代码块之间的指针:)你是在寻找整数数组吗?如果是这样,您应该使用
new[]
,比如:
int*xDump=newint[vSize]。不确定这段代码的意义是什么,如果是一个整数,你可以直接存储它。我几乎不认为他真的想动态分配一个整数并将其初始化为一个叫做“大小”的东西…@every1
int(vSize)
这是在调用构造函数吗?除了我想不出在什么情况下
newint[vSize]
才是正确的。在C++中编写此方法的方法是:<代码> STD::vector xDUP(vStand);<代码>@JamesKanze是的,我知道,但是,OP似乎正在学习new/delete。@JamesKanze如果您正在制作一个boost shared_阵列,那么它将是正确的。然后,您仍然会使用新的[],但不会执行任何删除操作。@miguel.martin为什么?在某些情况下,您确实需要了解
new
delete
。但是在接近C++的25年里,我从来没有发现一个例子:<代码> NeX[]/Cord>是一个合理的答案。问题出在
new[]
本身,而
boost::shared_array
对此没有任何作用;std::向量yDump(vSize);
int* xDump = new int;
*xDump = vSize;