Ne engedjetek .h-ba definíciót írni! Ha valaki ilyenre vetemedik szembesülni fog linkelési hibákkal, ugyanis a rendez.cpp is include-olja a string2.h-t!
Az előre elkészített paraméter nélkül hívható konstruktor NULL pointert állít be, amit a szintén előre elkészített c_str() habozás nélkül visszaad. Ezt indulásnak kicsit rágjátok meg!
Ha valaki a konstruktor előtti komment szerint a b) változatot választja az üres sztring létrehozására, ugyanakkor valamelyik tagfüggvényben (pl. a + operator) létrehoz magának egy üres temp sztringet, akkor annak a dinamikus, területét fel kell szabadítani mielőtt a pointerét használná! Különben memóriafogyás lesz.
// << operátor, ami beolvas az istreamről egy szót
std::istream& operator>>(std::istream& is, String& s0) {
unsigned char ch;
s0 = String(""); // üres string, ehhez fűzünk hozzá
std::ios_base::fmtflags fl = is.flags(); // eltesszük a régi flag-eket
is.setf(ios_base::skipws); // az elején eldobjuk a ws-t
while (is >> ch) {
is.unsetf(ios_base::skipws); // utána pedig már nem
if (isspace(ch)) {
is.putback(ch); // na ezt nem kérjük
break;
} else {
s0 = s0 + ch; // végére fűzzük a karaktert
}
}
is.flags(fl); // visszaállítjuk a flag-eket
return is;
}