?
Du musst alles wieder freigeben, was du mit new anforderst. Faustregel: Zu jedem new ein delete, zu jedem new[] ein delete[]. Wenn es überhaupt möglich ist, nimm am besten std::string und std::wstring, die übernehmen die Speicherverwaltung für dich.
Was die Warnung angeht, die kannst du getrost ignorieren (bzw. das angegebene Makro in die Projekteigenschaften aufnehmen). Microsoft hat seit MSVC 2005 eine Reihe von nicht standardisierten Funktionen, die im Grunde das gleiche wie Standardfunktionen machen, aber anderes Fehlerbehandlungsverhalten haben. In einigen Fällen ist das sinnvoll, beispielsweise gets und strcpy, allerdings gibt es dafür in nahezu allen Fällen standardisierte Funktionen, die deren Probleme behandeln (gets -> fgets, strcpy -> strncpy).
Das Problem damit ist, dass MSVC mit ziemlich bei den Haaren herbeigezogenen Begründungen über nicht weiter gefährliche Funktionen warnt. Es ist ohne die *_SECURE_NO_WARNINGS-Makros nahezu unmöglich, standardkonformen C++-Code (oder auch C-Code) zu schreiben, über den MSVC sich nicht beschwert. Im Falle von std::copy kannst etwa du Probleme kriegen, wenn du dich sehr dämlich anstellst, beispielsweise
std::string s = "foo", s2 = "bar", s3;
// Iteratoren von zwei verschiedenen Containern als Bereichsbegrenzungen,
// d.h. KAWUMM!
std::copy(s.begin(), s2.end(), std::back_inserter(s3));
Natürlich kann man die _s-Funktionen auf ähnliche Weisen auch zu Blödsinn überreden, ein Gewinn ist damit also an dieser Stelle nicht wirklich zu haben.
Ich habe den Verdacht, dass dahinter vor allem das Bestreben steht, Programmierer dazu zu erziehen, nur unter Windows lauffähigen Code zu schreiben.