G
Bevor du mittels alternativem Speichermanagement optimierst, würde ich erstmal grundsätzlich an deiner String Klasse optimieren. So wie es aussieht, kapselt deine Klasse einfach einen C-String. Das ist Müll! Gerade bei append Aufrufen merkt man das, da immer erst der komplette String durchiteriert werden muss, um an die Länge zu kommen. Du hast zwar die Membervariable m_uiLength, ich frage mich nur wozu, wenn die bei StrCat nicht zum Einsatz kommt. Verwende ein vernünftiges String Layout. Ein simples unformatiertes Zeichenarray mit Längenvariable reicht ja vollkommen aus.
Zudem solltest du dir eine Strategie für das Reservieren und Freigeben von Speicher einfallen lassen. Du musst zB nicht immer reservieren. Wenn der vorhandene Speicher noch ausreicht um die entsprechenden Zeichen anzuhängen, gibt es keinen Grund für new. Damit das funktioniert, muss man natürlich irgendwann mal etwas mehr Speicher als notwendig reserviert haben. In meiner Klasse benutze ich zB einen Faktor von 1,5. Wenn dem String zB 20 Zeichen zugewiesen werden, reserviere ich 30. Bei den nächsten 10 angefügten Zeichen muss also kein new aufgerufen werden. Erst beim 31. Zeichen ist es wieder notwendig, und dann werden wieder 1,5 mal soviel Speicher wie notwendig reserviert. Natürlich steigt damit der Speicherverbrauch. Mit Policies kann man das aber gut steuern und so den optimalen Faktor bestimmen. Du kannst dir natürlich auch was Ausgefalleneres ausdenken.
Ich verstehe auch nicht, warum du von m_pString erst eine Kopie machst. Reicht denn ein temporärer Zeiger nicht aus?
tmp = new ...
copy(tmp, old)
append(tmp, parameter)
delete old
old = tmp
Ausserdem kannst du Sachen wie
if(pStrCpy == NULL) return;
weglassen. new liefert _niemals_ einen Nullzeiger zurück. Das ist nur bei new(nothrow) der Fall.