Hi Karsten 
Währe es dann nicht geschickter sie als
map zu übergeben oder
werden sie dann nicht automatisch gelöscht?
Referenzen können nicht deklariert, sondern nur definiert werden. Das bedeutet, dass man ihnen direkt bei der Variablenvereinbarung einen Wert zuweisen muss.
int &test2= test; //Das funktioniert
int &test2; //Das gibt Haue vom Compiler
test2= test;
Daher könntest du lediglich mit Pointern arbeiten:
map
Dann bekommst du allerdings Probleme, weil die map dann beim Einfügen die Speicheradressen vergleicht und nicht die Strings selber. Das ist sicherlich auch nicht erwünscht. Die STL bietet dir allerdings die Möglichkeit, eine eigene Vergleichsroutine zu verwenden. Aber das ist eine ganz häßlich Syntax 
Mir geht’s hier um die Laufzeit. Wenn ich den Kopierkonstruktor
verwende, dann kostet das einen Konstruktor und
Destruktoraufruf.
Beide Aufrufe (Copy-Konstruktor und Destruktor) sind aber billig. Normalerweise werden strings mit Referenz-Counting implementiert. Eine Befehlsfolge wie diese:
string a= „Egon“;
string b= a;
bewirkt dann, dass der String „Egon“ bei der Definition von a erzeugt wird und sein Referenzzähler auf 1 gesetzt wird. Bei b=a wird dann nur ein Verweis auf String a erzeugt und der Referenzzähler von „Egon“ auf 2 gesetzt. Daher ist ein Copy-Konstruktor quasi umsonst. Der Destructor von a oder b vermindert nur den Referenzzähler um 1. Erst der Destructor, der bei einem Referenzzähler von 1 aufgerufen wird, muss den String wirklich aus dem Speicher entfernen. Referenzzählung ist also eine gute Sache. Allerdings sind Schreibzugriffe recht teuer. Wenn du z.B. den Wert von b ändern möchtest, muss erst eine echte Kopie von „Egon“ für b angelegt werden. Diese Technik nennt man „copy on write“. Nunja, auf jeden Fall brauchst du dir bei Copy-Constructor und Destructor keinen Stress wegen der Laufzeit zu machen 
Viele Grüße
Stefan.