C++新()到底有什么<datatype><value>作用?

C++ what exactly does new <datatype>(<value>) do?

本文关键字:gt lt datatype value 作用 什么 C++      更新时间:2023-10-16

在这段代码中:

int * p = new int(44);

p 在堆上分配,它指向的值为 44;但现在我也可以做这样的事情:

p[1] = 33;

没有收到错误。 我一直以为

int * p = new int(44);

只是另一种说法"P 在堆上分配并指向包含 44 的地址",但显然它使 p 成为指向整数数组的指针? 这个新数组的大小是 44 吗?还是这个结果不寻常。

你是对的:P 在堆上分配并指向包含 44 的地址。 没有分配数组。 p[1] = 33;就是他们所谓的"未定义的行为"。 您的程序可能会崩溃,但不能保证每次执行此操作时都会崩溃。

int *p_scalar = new int(5); //allocates an integer, set to 5.

如果访问 p_scalar[n] (n <> 0),它可能会崩溃

在您的示例中,C++ 语言为您提供了指针的下标运算符的默认实现,看起来类似于以下内容:

(*Ptr)& operator[](size_t index)
{
   return *(address + index*sizeof(*Ptr));
}

对于任何类型,这始终可以重载和替换。整数也不例外,当你说:

int * pointer = alocate_int_array();
pointer[1] = 1;

你正在使用该运算符的编译器增强的默认实现。