可能重复:
这是变量还是函数
我错误地使用了类似的东西:
int *arr = new int(100);
Run Code Online (Sandbox Code Playgroud)
它通过编译,但我知道这是错的.它应该是
int *arr = new int[100];
Run Code Online (Sandbox Code Playgroud)
当我写错了编译器时,编译器会怎么想?
NPE*_*NPE 63
第一行分配一个int
并初始化它100
.将其int(100)
视为构造函数调用.
由于这是一个标量分配,尝试访问arr[1]
或释放内存delete[]
将导致未定义的行为.
Peo*_*are 24
维基百科新(C++)引用:
int *p_scalar = new int(5); //allocates an integer, set to 5. (same syntax as constructors)
int *p_array = new int[5]; //allocates an array of 5 adjacent integers. (undefined values)
Run Code Online (Sandbox Code Playgroud)
在当前的维基百科文章new
和delete
(C++)中,该示例已被删除.
另外这里的直观性较差,但完全可靠的C++参考new
和new[]
.
它分配一个类型的对象int
并将其初始化为value 100
.
很多人都不知道你可以传递一个初始化器new
,有一个特定的习惯用法应该更广为人知,以避免使用memset
:
new int[100]();
Run Code Online (Sandbox Code Playgroud)
这将分配一个数组int
并对其元素进行零初始化.
此外,您不应该使用的数组版本new
.永远.就是std::vector
出于这个目的.
归档时间: |
|
查看次数: |
51519 次 |
最近记录: |