Kad to kazes impliciras da resenjem na gornji nacin neces imati ni exception-safe kod (a poenta je bila da gornji kod jeste exception-safe), ni ispravnu copy semantiku, sto jednostavno nije tacno
Slažem se da ne postoje "univerzalno bolja" rešenja, ali ako su ti performanse izgovor da uopšte ne koristiš standardnu biblioteku, onda praviš veliku grešku koja se zove "Premature optimization". Otkud znaš da je rešenje sa golim pointerima brže nego sa vektorom?
Radi se o tome da tacnu semantiku tvoje klase znas samo ti (npr. znas da pomeranje niza objekata tvoje klase trpi i memcpy, a nema potrebe za pozivanjem operatora = ili copy konstruktora (ovo ne znaci da tvoja klasa ne sadrzi pointere)) pa ti mozes da napravis dinamicki niz koji ce se bolje ponasati od bilo kog template-a koji je pisan sa namerom da funkcionise u svim slucajevima.
možeš da uradiš npr nešto ovako:
class a : boost::noncopyable {
boost::scoped_array<char> an, bn;
public:
a() : an(new char[1000]), bn(new char[1000000])
{}
};
Tema je bila kako pisati kod koji nece imati curenja u konstruktoru - ti dajes predlog za kod koji opet ima probleme sa curenjem.
Sto se tice auto_ptr i slicnih template-a njihova primena je prilicno ogranicena na specificne slucajeve (prosledjivanje pointera kao parametara i slicno), a nikako ne predstavljaju neko univerzalno primenljivo resenje (kako bi tim zezalicama implementirao asocijacije medju objektima gde mogu da se jave i curkularne reference i ko zna sta jos?). Druga stvar o kojoj treba voditi racuna je da li ti znas kako je TACNO implementiran neki template u STL-u - npr. vector - koliko se secam jedino sto se garantuje je da je pristup proizvoljnom elementu O(1) operacija - ali nisu svi O(1) uvek bas to - ako je vector napisan tako da cuva niz pointera na svoj sadrzaj (npr. da bi se izbeglo cesto pozivanje copy konstruktora pri produzavanju) ti imas O(1) pri pristupu elementima i potencijalno lose performanse pri maloj kolicini slobodne fizicke memorije u zavisnosti od redosleda kojim su kreirani objekti (moze da izaziva veliki broj page fault-ova iako je kolicina memorije zauzeta tim objektima mozda mala).
Poenta onog sto hocu da kazem je da ne treba izbegavati pointere (ako hoces da radis bez njih imas c# i javu), i da ne treba koristiti STL po svaku cenu (nema puno smisla izmisljati toplu vodu ako neki STL template radi TACNO ono sto ti treba i to onako kako ti hoces).
Nisam hteo da davim (iako se malo oteglo), samo da predstavim drugu stranu medalje...