Newsgroup: it.comp.lang.c++
Titolo: Restituzione per riferimento

In quali contesti ha senso che una funzione membro di una classe restituisca
una variabile per riferimento? sarebbe per risparmiare copie inutili
presumo...
Ciao
Antonio

Parikkala wrote:

In base a molte testimonianze presenti in letteratura, non è mai utile. 
Il motivo di base sta nel fatto che restituire per riferimento "nasconde" la 
problematica del ciclo di vita dell'oggetto. In altri termini, il passaggio 
per riferimento viene usato, in questo caso, per evitare di ritornare un 
puntatore e quindi "rischiare" di avere un puntatore NULL (senza contare la 
fatidica domanda: chi dealloca?). D'altro canto, il problema permane (se 
passi come riferimento una variabile locale, essa smette di esistere non 
appena sei tornato dal membro; se passi come riferimento una variabile 
statica, essa viene condivisa da tutti i clienti di quel metodo).
Meglio ritornare un auto_ptr.
Esempio:
        A& B::f( ... );
da modificarsi in
        std::auto_ptr< A > B::f( ... );
Ciao!
-- 
---
*************** | Have you ever retired a human by mystake?
*** Azathot *** |
*************** | To contact me, ask me gently. Thanks.

 ha scritto nel messaggio
news:6EQua.45460$DN.11...@tornado.fastwebnet.it...


> presumo...
Una funzione membro (se non specificata) non è statica, mentre è necessario 
un metodo statico per implementare il Singleton.


 un metodo statico per implementare il Singleton.
Già che ci siete mi spiegate cos'è questo Singleton?
Ciao
Antonio

 Già che ci siete mi spiegate cos'è questo Singleton?
GIYF:
http://gethelp.devx.com/techtips/cpp_pro/10min/10min0200.asp
http://www.codeproject.com/tips/singleton.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/singletondespatt.asp


 ha scritto nel messaggio
news:9lSua.45627$DN.11...@tornado.fastwebnet.it...


 restituisca una variabile per riferimento?
in tutti quelli in cui ritorneresti un puntatore da dereferenziare
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.1.1. C, C++ and ASM developers
                               and beta testers are welcome!

 In base a molte testimonianze presenti in letteratura, non è mai utile.
beh, non sarei cosi` drastico: diciamo che nella maggior parte dei casi
restituire una variabile per riferimento vuol dire andare in cerca di guai,
pero` ci sono dei casi in cui ha perfettamente senso; i primi due che mi
vengono in mente sono:
1) per quel che riguardale funzioni membro, se devi implementare gli
operatori di assegnamento, come =, +=, -=, ecc:
        class BigInteger {
        public:
                ...
                BigInteger& operator+=(const BigInteger&) {
                        ...
                        return *this;
                }
        };
2) per quel che riguarda le funzioni non-membro, prendi ad esempio
l'implementazione tipica di operator<<:
        std::ostream& operator<<(std::ostream& os, const T&)
        {
                ...
                return os;
        }
Come regola generale, direi che ci sono tre casi in cui e` possibile
restituire un riferimento:
1) se devi restituire te stesso, quindi *this: vedi l'esempio degli
operatori di assegnazione;
2) se devi restituire un parametro che ti e` stato passato dal chiamante:
vedi l'esempio di operator<<;
3) se devi restituire una variabile statica: vedi ad esempio la tipica
implementazione del Singleton.
ciao Anto
-- 
"Computer science is not about computers any more than astronomy
is about telescopes." -- EW Dijkstra

 di al piu' un oggetto di una data classe.
Questa e' la definizione corrente, ma, se non sbaglio, sotto il nome di
Singleton vanno anche quelle tecniche che implementano il controllo del
numero d'istanze di un dato oggetto: 1, ma anche p.e. 42 :-)
Ciao
Gian Michele

 ha scritto nel messaggio
news:hzNva.112517$iy5.3...@twister2.libero.it...


 intellettuali.
Multiplon?


 speculazioni intellettuali.
Anche se l'assonanza e' palese sono due parole diverse e la seconda e'
un neologismo. Se leggi attentamente il Gamma e soci e non ti fermi alle
prime righe, e' spiegato chiaramente che uno dei vantaggi del Singleton
e' proprio la sua estensibilita' al caso di piu' istanze.
Mi sembra quindi legittimo che la conoscenza non superficiale del
pattern in questione possa comprendere il concetto che ricordavo e che
coloro che prendano in mano codici che fanno un uso "esteso" del pattern
non trovino sorprese. Non si tratta infatti di "speculazione
intellettuale", ma di una possibilita' effettivamente prevista. A tal
proposito mi permetto di suggerire anche l'Item 26 di "More Effective
C++".
In ogni caso, mi sembra molto piu' interessante il concetto di controllo
del numero d'istanze (di cui 1 e' un caso particolare) che il banale
caso esemplificato da:
class MySingleton
{
    MySingleton();
    ~MySingleton();
public:
   friend MySingleton& theSingleton();
};
MySingleton& theSingleton()
{
   static MySingleton ts;
   return ts;
}
Ciao
Gian Michele

 ha scritto nel messaggio
news:xAVva.114539$iy5.3...@twister2.libero.it...


 ha scritto nel messaggio
news:rI0wa.49682$DN.12...@tornado.fastwebnet.it...


 ...pongo nuovamente in luce l'importanza della comunicazione.
Meyers non parla di Singleton e siamo d'accordo, ma spero lo stesso che
tu abbia trovato interessanti quelle pagine. In realta' sono anche
d'accordo sulla cautela che esprimi.
Tuttavia, qui come in altre occasioni, mi sembra piu' interessante
cercare di ampliare i concetti piuttosto che farsi imprigionare dalle
(presunte) definizioni.
Resta il fatto che, se proprio vogliamo dei riferimenti, nel Gamma e
soci (che sui design patterns ha la sua bella autorevolezza) si citi
l'espandibilita' a piu' istanze del singleton come uno dei punti di
forza del pattern stesso.
Come spero di aver mostrato l'altra volta il singleton "nudo e crudo" e'
veramente poco interessante.
Ciao
Gian Michele