Tuli tämmöinen case mieleen. Jos olisi esimerkkinä funktio, jossa luodaan olio ja palautetaan sen osoitin kutsuvalle funktiolle, niin sehän luonnollisesti katoaa jos se on automaattisesti luotu. Ja dynaaminen olio on taas hankala kun sen poistaminen on vähän kankeata, jos sen luo täysin satunnaisessa funktiossa, ei luokan sisältä. Olisiko auto_ptr:stä hyötyä tässä tapauksessa?
Edit: testailin vähän. Ei tunnu onnistuvan.
Edit2: sainpa toimimaan sen ajatuksen. Tässä joku koodinpätkä.
#include <iostream> #include <memory> using namespace std; class Func { private: int *s; public: Func(int c) { s = new int(c); cout << "(" << *s << ") Func init'd" << endl; } ~Func() { cout << "(" << *s << ") Func deinit'd" << endl; delete s; } void print() { cout << "Me number is " << *s << endl; } }; Func* createFunc(int c) { return new Func(c); } auto_ptr<Func> createFuncAuto(int c) { return auto_ptr <Func> (new Func(c)); } int main() { auto_ptr<Func> bar = createFuncAuto(10); Func* foo = createFunc(-4); // käyttö onnistuu kuten olettaisi. // Paitsi, että ei. auto_ptr on näköjään overloadannut -> -operaattorin, // jotta sisäfunktiota (heh) on nopsakka käytellä bar->print(); foo->print(); // foo pitää erikseen deletoida. delete foo; return 0; }
No juurikin tällaisissa tapauksissa auto_ptr:stä on hyötyä.
Miten niin "käyttö onnistuu kuten olettaisi. Paitsi, että ei."? Se, että auto_ptr overloadaa -> -operaattorin on justiinsa sitä varten, että auto_ptr toimisi tässä suhteessa kuin ihan tavallinen naked pointteri.
Edit: Niin, ja vaikka funktio palauttaisi ihan vaan osoittimen, niin sen voi alustaa auto_ptr:iin, ja hoituu sitten se deletointi itsekseen.
Boost-kirjastosta saattaa olla apua tämän kaltaisissa ongelmissa. Tai ainakin voi ottaa mallia.
koo kirjoitti:
Edit: Niin, ja vaikka funktio palauttaisi ihan vaan osoittimen, niin sen voi alustaa auto_ptr:iin, ja hoituu sitten se deletointi itsekseen.
Tätä oikeastaan hainkin, ei tunnu mielekkäältä määrätä funktion, olkoon se nyt miten spesifinen tahansa, paluutyyppiä auto_ptr<>-tyyppiseksi.
Boost-esimerkit menevät vähän yli hilseen. Se on melko moninainen systeemi muutenkin.
Esimerkiksi tämä auto_ptr-aiheinen artikkeli vaikutti olevan asiapitoisuuden ja yksinkertaisuuden suhteen varsin optimoitu, vähintäänkin peruasiat käyvät hyvin ilmi: http://www.gotw.ca/publications/
Aihe on jo aika vanha, joten et voi enää vastata siihen.