根据 C++03 标准 (5.3.4/7):
当 direct-new-declarator 中表达式的值为零时,调用分配函数来分配一个没有元素的数组。
根据我的阅读,这意味着该代码是合法的并且具有特定的效果:
#include <iostream>
#include <string>
using namespace std;
class A
{
public:
A() : a_(++aa_) {};
int a_;
static int aa_;
};
int A::aa_ = 0;
int main()
{
A* a = new A[0];
// cout << "A" << a->a_ << endl; // <-- this would be undefined behavior
}
当我在调试器下运行这段代码时,我看到A
' 的构造函数从未被调用过。 new
不抛出,并返回一个非空的、明显有效的指针。但是, at 的值a->a_
是未初始化的内存。
问题:
- 在上面的代码中,
a
实际指向什么? - “分配一个没有元素的数组”是什么意思?
- 分配一个元素为零的数组有什么实际用途?