|
|
|
![]() |
|
Strumenti |
![]() |
#281 | |||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
A me hanno sempre detto che è un comportamento da evitare, una classe dovrebbe avere il pieno controllo delle variabili che utilizza, se vuoi modificare una variabile devi passare per i metodi set, ma se dall'esterno qualcuno tiene il riferimento all'oggetto può modificarlo senza passare dal set. Usi la copia o violi l'incapsulamento? Per quanto riguarda processare fuffa, il C++ risolve utilizzando auto_ptr. Se qualcuno ti passa un auto_ptr sai per certo che ti lascia l'ownership del puntatore, altrimenti devi supporre che non lo deallocherai salvo specifiche opposte (generalmente questi problemi nascono interfacciandosi con librerie in C). Quote:
Quote:
![]() Ultima modifica di tomminno : 03-01-2008 alle 23:58. |
|||
![]() |
![]() |
![]() |
#282 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Scusate...ma Java come si comporta in un caso del genere...ora mi create confusione
![]() Io passo per riferimento la classe Telegram, ma se io mi devo prendere la stringa e modificarla devo assolutamente farmi una copia...sia per come è definita una string in Java, sia per evitare qualcun altro mi modifichi l'oggetto dall'esterno...no ? Poi il fatto che si facciano queste copie in più non significa assolutamente che Java sia più lento del C++...abbiamo visto come anche su una cosa banale (il bubblesort che ho postato qualche pagina fa) il C++ possa essere anche più veloce di Java di 4-5 volte...credo che questo vantaggio possa far entrare ampiamente qualche copia in più fatta nel passaggio dei parametri e nella gestione delle classi... Ultima modifica di cionci : 04-01-2008 alle 00:37. |
![]() |
![]() |
![]() |
#283 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Purtroppo non e' cosi' facile in C++, occorre sempre trovare delle "scorciatoie" che non sempre funzionano, e decidono di non funzionare alle 3 del mattino, costringendo sottovento ad alzarsi, spostare la famiglia che gli dorme sopra, e correre per 30 miglia a risolvere il problema ![]() ![]() auto_ptr e compagnia bella non mi sembra si possano applicare in questi casi, quanto meno io non ce lo vedo proprio...
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#284 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() In C++ ti mantieni un solo messaggio locale al dispatcher e lo deallochi o automaticamente (variabile locale o auto_ptr) o con la delete quando lo hai consegnato a tutti i client registrati. Sei esattamente nella stessa situazione...ne una copia in più ne una in meno ![]() |
|
![]() |
![]() |
![]() |
#285 | ||
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Questo non toglie che la copia possa essere una soluzione piu' comoda, ma non e' l'unica. Quote:
![]()
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
||
![]() |
![]() |
![]() |
#286 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Questo non significa per caso fare una copia dell'oggetto? |
|
![]() |
![]() |
![]() |
#287 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
![]() non farlo e ti risparmi possibili rogne.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#288 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
|
![]() |
![]() |
![]() |
#289 | ||||
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Quindi ci rientrano linguaggi come Java, C#, Python, Ruby, ecc., dove l'esecuzione avviene attraverso una VM che è dotata ANCHE di GC (nei casi in cui serva) e che "diriga" l'esecuzione del codice aggiungendo eventuali controlli necessari per impedire l'esecuzione di azioni dannose e/o non previste. Quote:
![]() Quote:
![]() Quote:
Possono essere un'utile "metrica" per vedere il comportamento di specifiche piattaforme su specifici pezzi di codice, ma giusto per farsi un'idea. Non conosco nello specifico i "dettami" che si devono seguire per implementare i programmi, ma leggendo quella pagina non mi pare che vi siano imposizioni su come debba essere scritto il codice. A cosa ti riferisci di preciso?
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
||||
![]() |
![]() |
![]() |
#290 | |
Senior Member
Iscritto dal: Sep 2004
Messaggi: 3967
|
Quote:
Perdonami Cesare!! ![]() Ma sottintendi che riscrivendo Diamond in C++ si tramuterà in un cicloopico Crash ? ![]() Scusate l'ot ![]()
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek ![]() |
|
![]() |
![]() |
![]() |
#291 | |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Quote:
![]()
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
|
![]() |
![]() |
![]() |
#292 |
Senior Member
Iscritto dal: Oct 2002
Città: San Jose, California
Messaggi: 11782
|
Spiegami come si fa! Spiegami come si fa! Diventiamo ricchissimi!
__________________
"We in the game industry are lucky enough to be able to create our visions" @ NVIDIA |
![]() |
![]() |
![]() |
#293 | |
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
In generale il costruttore si prendera' in carico delle eventuali decodifiche (che devono essere fatte una sola volta, in partenza).
__________________
In God we trust; all others bring data |
|
![]() |
![]() |
![]() |
#294 | |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
![]() ![]() Figurati che una volta ho pronunciato "drag en drop" (proprio così) e i miei amici che erano vicini si sono ribaltati dalle risate. ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
![]() |
![]() |
![]() |
#295 | |
Member
Iscritto dal: Nov 2005
Messaggi: 154
|
Quote:
lascia stare i linguaggi ad oggetti.
__________________
"la scelta giusta non è sempre la più saggia,ma è quella che non porta con sè rimpianti" . pietro84 |
|
![]() |
![]() |
![]() |
#296 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Mai avuto a che fare con le Win32 o le GTK? Evidentemente no, altrimenti non avresti fatto un'affermazione simile. |
|
![]() |
![]() |
![]() |
#297 | |
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
![]() Se tu invece intendevi usare la variabile (per lo scopo per il quale e' stato chiamato il metodo) il discorso e' un po' diverso, ma per certi versi abbastanza semplice. Tenersi una copia di una istanza o un puntatore/riferimento dovrebbe dipendere semplicemente dal fatto che dal punto di vista logico l'oggetto a cui ci si riferisce sia lo stesso o un altro. Voglio che chi elabora la coda possa modificare l'oggetto che mi e' stato passato o, al contrario, vedere le modifiche che ha effettuato qualcun altro ? Mi tengo il puntatore. Voglio che il risultato dell'elaborazione sia un qualcosa di distinto dal suo input ? Me lo copio e poi lo modifico. E' comunque una cosa che va al di la' del linguaggio, e che quindi vale tanto in C++ quanto in Java. A dire il vero in C++ ho un'arma in piu': se il chiamante vuole essere sicuro che l'oggetto non venga modificato posso passarlo come const, ed evitare che il chiamato adotti la prima soluzione.
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|
![]() |
![]() |
![]() |
#298 | |||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
Il C++ in questi casi obbliga ad usare i puntatori. Quote:
Purtroppo il C++ non garantisce niente, in quanto potresti volutamente togliere il const a qualunque cosa. Infatti a causa di questo in linea teorica sarebbe sempre bene passare copie di variabili locali. Io sinceramente me ne sono sempre fregato di potenziali terroristi del codice e restituisco sempre riferimenti const. |
|||
![]() |
![]() |
![]() |
#299 | |
Senior Member
Iscritto dal: Aug 2004
Messaggi: 311
|
Quote:
![]()
__________________
Senior Member Registrato il: Jan 2001 Messaggi: 2609 |
|
![]() |
![]() |
![]() |
#300 | |||
Senior Member
Iscritto dal: Dec 2005
Città: Istanbul
Messaggi: 1817
|
Quote:
Quote:
Quote:
Era questo a cui mi riferivo, e non e' una cosa da poco. Il problema di chi opera con malizia e' tutto un altro paio di maniche, ma anche piu' circoscritto, visto che di solito e' legato a chi scrive codice che deve essere utilizzato da terze parti (ad esempio una libreria).
__________________
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions. —Guy Steele |
|||
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:06.