首先,根据C++标准,对任何使用new[]分配的对象使用delete都是未定义的行为。
在Visual C++ 7中,这样的配对可能会导致两种后果之一。如果类型new[]'ed有一个非平凡的构造函数或析构函数,上面的技巧就不能做了-- VC++7必须调用正确数量的析构函数。所以它在数组前加上一个存储元素数量的size_t。现在new[]返回的地址指向第一个元素,而不是块的开头。所以如果使用delete,它只调用第一个
int i = 0; i < 10; i++) calculators[i] = new Calc();谁能解释一下为什么我们需要重新分配内存,而不是c/c++。这是我在c++中是如何做到的:
Calculator *calc=new Calculator[10]//I know I need to check for std::bad_alloc exception