Nye og nye, i henhold til Bjarnes "The Design and Evolution of C++" afsnit 16.1, så går designet tilbage til 1987, med implementationer klar til brug i foråret 1992. Så det er altså 11 år siden. Og den første C++ implementation var klar til brug i 1983, men kun til internt brug hos Bell Labs. Eksternt brug kom først i 1985 med release E (see C++ Timeline i samme bog, kapitel 0).
Men der kom først std::bad_alloc på i forbindelse med ANSI C++ (som også introducerede new med nothrow, som ikke kaster bad_alloc, men returnerer 0:
int* p = new(nothrow) int[1000]; // Alloker 1000 ints if (p) { // Allokering lykkedes } else { // Allokering mislykkedes } )
Tjah, personligt ville jeg nok nøjes med at konstatere at MS VC++ 6.0 er langt fra standarden (den er i øvrigt også *ret* dårlig til templates), og så som udgangspunkt bruge bad_alloc udgaven, evt. med en #ifdef med noget speciel VC++ kode. Eller brug VC++ 7.0, som skulle være noget bedre.
MSDN Library Visual Studio 6.0 siger om 'operator new function'
When a statement such as the following is encountered in a program, it translates into a call to the function operator new:
char *pch = new char[BUFFER_SIZE];
If the request is for zero bytes of storage, operator new returns a pointer to a distinct object (that is, repeated calls to operator new return different pointers). If there is insufficient memory for the allocation request, by default operator new returns NULL. You can change this default behavior by writing a custom exception-handling routine and calling the _set_new_handler run-time library function with your function name as its argument.
VC++ i 2002 udgaven opfylder heller ikke standarden m.h.t. templates, så hvis man vil køre den nyeste ISO/ANSI C++ med en microsoft compiler, så må man have fat i VC++ 2003
Hvis du er interesseret i en god opslagsbog, så kan jeg anbefale Bjarne Stroustrup: The C++ Programming Language, Third Edition. Men den er altså ikke særlig god som lærebog.
"The Design and Evolution of C++" af samme forfatter er en meget interessant gennemgang af tankerne bag C++. Men den er nok ikke rigtig til at læse før man er en nogenlunde habil C++ koder.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.