Die MSDN ist eines der größten und besten Nachschlagewerke, die ich kenne, allerdings gehen mir auch seine Unzulänglichkeiten ab und zu auf die Nerven (und hier meine ich nicht die funktionellen Defizite, sondern die inhaltlichen)!
Das sind dann ganz besonders die kleinen Sachen, die einem das Leben leicht machen könnten, die dann nicht „vollständig“ dokumentiert sind.
Beispiel:
Die MFC List-Container (z.B. CObList). Wir lesen in der Doku zu InsertAfter:
position
A POSITION value returned by a previous GetNext, GetPrev, or Find member function call.
Gut! Aber da steht nichts zu NULL. 😕
Aber wenn ich genauer darüber nachdenken, kann GetNext und Find auch NULL zurückgeben…
Was passiert also wenn ich NULL als Argument für position?
Mein Verstand sagt mir: „Es wird ein Element am Ende eingeführt!“ und ein Blick in den Code bestätigt den Verdacht.
Warum steht in der Doku nicht gleich, dass InsertAfter mit NULL als position ein AddTail ausführt?
Wer weiß wieviele Entwicler solchen „unnützen“ Code aufgrund der mangelnden Doku geschrieben haben:
CStringList lst;
FillMyList(lst);
POSITION pos = lst.Find(_T("Anything"));
if (pos==NULL)
lst.AddTail(_T("Something to insert"));
else
lst.InsertAfter(pos,_T("Something to insert"));
Es würde ja genügen wie folgt zu schreiben:
CStringList lst;
FillMyList(lst);
POSITION pos = lst.Find(_T("Anything"));
lst.InsertAfter(pos,_T("Something to insert"));
Korrespondierend ist die Doku von CObjList::InsertBefore genauso unvollständig.
Wird NULL als Position verwendet wird hier ein AddHead ausgeführt.
PS: Mich ärgert auch jedesmal wenn einer meiner Kollegen solchen Code schreibt:
CSomeObject *p = NULL;
...
// Conditional create
if (SomeThing())
p = new CSomeObject();
...
// Cleanup
if (p) // Category meaningless
delete p;
-
Warum der Test auf !=NULL?
-
Warum wird kein Autopointer verwendet, der das auch Exception-Save gemacht hätte?