我定义了一个类foo如下:
class foo { private: static int objcnt; public: foo() { if(objcnt==8) throw outOfMemory("No more space!"); else objcnt++; } class outOfMemory { public: outOfMemory(char* msg) { cout << msg << endl;} }; ~foo() { cout << "Deleting foo." << endl; objcnt--;} }; int foo::objcnt = 0;
这是主要功能:
int main() { try { foo* p = new foo[3]; cout << "p in try " << p << endl; foo* q = new foo[7]; }catch(foo::outOfMemory& o) { cout << "Out-of-memory Exception Caught." << endl; } }
很明显,行“foo * q = new foo [7];”仅成功创建5个对象,并在第6个对象上抛出内存不足异常.但事实证明,只有5个析构函数调用,并且没有为存储在p指向的位置存储的3个对象的数组调用destrcutor.所以我想知道为什么?为什么程序只调用这5个对象的析构函数?