Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这可能是新的无括号,但在C++中用括号删除 我知道在C++中创建数组 使用新[] 并删除此数组 使用delete[] Test * a = new Test; delete [] a;_C++ - Fatal编程技术网

这可能是新的无括号,但在C++中用括号删除 我知道在C++中创建数组 使用新[] 并删除此数组 使用delete[] Test * a = new Test; delete [] a;

这可能是新的无括号,但在C++中用括号删除 我知道在C++中创建数组 使用新[] 并删除此数组 使用delete[] Test * a = new Test; delete [] a;,c++,C++,我想知道我是否创建了一个对象 并使用delete[]删除此项 Test * a = new Test; delete [] a; 嗯。。。它是有效的。。。 但它安全吗?我应该使用不带括号的delete吗?不,不可以。行为充其量是未定义的 编辑: 由流行请求添加的信息链接:这是未定义的行为,最好避免。 IIRC MSVC处理或至少用于相同地处理new和array new,这是或曾经是令人愉快的迁移难题来源- 当你说它有效时,那是什么意思?你认为什么样的行为会起作用?嗯,如何找到这是一个被愚弄的问

我想知道我是否创建了一个对象 并使用delete[]删除此项

Test * a = new Test;
delete [] a;
嗯。。。它是有效的。。。
但它安全吗?我应该使用不带括号的delete吗?

不,不可以。行为充其量是未定义的

编辑:


由流行请求添加的信息链接:

这是未定义的行为,最好避免。
IIRC MSVC处理或至少用于相同地处理new和array new,这是或曾经是令人愉快的迁移难题来源-

当你说它有效时,那是什么意思?你认为什么样的行为会起作用?嗯,如何找到这是一个被愚弄的问题……有人使用find see answer作为被愚弄的目标,所以两者都会显示出来。如果Richard的答案涵盖了这一点,你应该选择它作为你所选择的答案轻推轻推重复@qeadz:Great article的评论链接,理查德:对不起,我答错地方了。这就是问题的本意:/无论如何,本是对的,这篇文章真的很好。如果你在意的话,也许可以把它加到你的答案中,因为这是一个很好的解释。信息链接是按要求添加的。对于基元类型,它们可以进行相同的处理,但对于具有非平凡析构函数的类型,它们永远不会被处理。@BenVoigt:我似乎记得MSVC为非平凡UDT管理它。我怀疑这是因为非数组删除具有数组删除复杂性,即以相同的方式实现它们。我不知道它是否仍然那么糟糕。不允许非数组new像数组new那样存储计数。非数组new在从::operator new请求的块大小方面没有存储开销,这是标准要求的。@BenVoigt:MSVC在允许的情况下运行得非常快和松散-