Newsgroup: it.comp.lang.c++
Titolo: Novello, non sbranatemi!!

Ciao a tutti,
sono uno studente che a una certa esperienza nella programmazione fortran,
html, javascript e che conosce le nozioni di base del C++. Leggendo i
messaggi del newsgroup da gennaio ad oggi non ho trovato niente che
soddisfasse le mie curiosità, mi spiego.
Devo sviluppare un programma che gestisce ordini/bolle/fatture/ricevute
bancarie di una azienda e per questo avrei pensato di appoggiarmi ad un
database (MySql per essere più specifici).
Ho qualche domanda da porre a voi esperti nella programmazione c++:
1) è facilmente gestibile il passaggio di informazioni c++ vs. mysql?
2) qualcuno di voi ha già dovuto scrivere programmi simili e può darti
qualche consiglio od avvertenza?
3) secondo voi, visto che devo fare un programma che costantemente si
interfaccia ad un database, è corretta la scelta della programmazione in c++
oppure mi consigliate qualche altro tipo di linguaggio che più si adatta
alle mie esigenze?
Vi ringrazio se mi risponderete in maniera non telegrafica, magari anche al
mio indirizzo mail
mar...@tin.it
Ciao a tutti e scusate se il mio messaggio risulta OT,
Marco.
--
Age quod agis

alle mie esigenze?
Una sola domanda : perche' MySQL ? 
Tieni presente che non e' relazionale...
--
Walkie...@Libero.It (ICQ# 8143647)

 >oppure mi consigliate qualche altro tipo di linguaggio che piů si adatta


non offre una interfaccia utente altrettanto comoda
Credo esista MySQL GUI (o qualcosa del genere).
(cmq siamo MOLTO OT ;)
--
Walkie...@Libero.It (ICQ# 8143647)

(cmq siamo MOLTO OT ;)
Molto no ! Solo un po' !
Alex

Ti sbagli, e' sicuramente un RDBMS !!!
Ok.  Mi sbagliavo.
In realta' ero rimasto alle vecchie versioni di MySQL, quando non
aveva ancora la gestione delle relazioni tra tabelle.  
--
Walkie...@Libero.It (ICQ# 8143647)

alle mie esigenze?
Il C++ e' adatto a un mare di applicazioni diverse.
Se ti trovi bene con il C++, non vedo perche' non utilizzarlo.
Riuscirai ad ottenere sicuramente un programma molto portabile, con i
dovuti accorgimenti.  Il consiglio se utilizzare o meno un altro
linguaggio e' subordinato, innanzitutto, alla tua conoscenza di un
altro linguaggio che ti consenta l'accesso a MySQL e poi alla
necessita' di questo programma di essere portabile, manutenibile,
ecc... ecc...
--
Walkie...@Libero.It (ICQ# 8143647)

aveva ancora la gestione delle relazioni tra tabelle.  
Solo un appunto. Una "relazione" nel gergo dei DB relazionali
e' una tabella; si tratta di un termine matematico per indicare
un sottoinsieme del prodotto cartesiano dei domini associati
alle colonne. Se con "relazioni fra tabelle" intendi i vincoli
di integrita' referenziale ti avviso che questi (sebbene
comodissimi e ormai supportati quasi ovunque) non sono parte
integrante del paradigma relazionale. Al punto che molte banche
dati basate su DB relazionali non ne fanno uso (specie su DB2).
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

e' una tabella;
Certo.  Una cosa e' pero' se questa "tabella" viene creata e gestita
in automatico dal DBMS.  Una cosa e' se va creata e gestita a mano dal
programmatore.
--
Walkie...@Libero.It (ICQ# 8143647)

Tieni presente che non e' relazionale...
In che senso non e` relazionale? 
Se e` un SQL sara` basato per forza sul modello relazionale, no?

 programmatore.
Infatti. In Visual Basic il tutto č gestito dal motore utilizzato.
Praticamente la "tabella" viene creata in memoria come tabella di
puntatori ai veri records (probabilmente). Invece Clipper/Fivewin non
dispone di un motore relazionale per cui eventuali "tabelle" di quel
tipo vanno create a mano. Detto cosě sembra un grosso svantaggio, eppure
non lo č e il sistema tradizionale (non relazionale) risulta parecchio
piů efficiente.
EMG

"Massimo Lauria" <Garga...@hal9000.localhost> wrote in message
news:slrn9h0d5b.3...@ftp.hal9000...

Cosa ti impedisce di scrivere un layer di accesso SQL su una engine non
relazionale (salvo il fatto che accedere con un paradigma relazionale ad una
base dati strutturata diversamente e' come iscriversi ad un GP e presentarsi
alle prove con una panda).
--
Andrea Ferro
---------
Brainbench C++ Master. Scored higher than 97% of previous takers
Scores: Overall 4.46, Conceptual 5.0, Problem-Solving 5.0
More info 
http://www.brainbench.com/transcript.jsp?pid=2522556

Se e` un SQL sara` basato per forza sul modello relazionale, no?
No.
--
Walkie...@Libero.It (ICQ# 8143647)

programmatore.
Stai parlando a vanvera.
Il mio non voleva essere un appunto cattivo... volevo solo
farti presente che la parola "relazionale" nel termine
"database relazionale" non significa quello che credevi.
Quello che hai commesso tu e' un errore molto comune... il
termine "relazione" in "db relazionale" non e' qualcosa che
riguarda due tabelle... anche se nel parlare comune si dice
che le cose si "mettono in relazione".
In particolare dire che un DB non e' relazionale perche'
non supporta le foreign key (credo fosse questo che intendevi)
e' una cretinata. Come ti ho gia' detto si tratta di un
termine matematico che deriva dalla teoria degli insiemi
e indica quella che in un DB relazionale e' una singola
tabella. Ad esempio la tabella CLIENTI (con codice fisale,
indirizzo, eta' e quant'altro) e', *da sola*, una RELAZIONE
in quanto e' un sottoinsieme del prodotto cartesiano degli
insiemi ammissibilidi valori (domini) delle colonne che
compongono la tabella. L'algebra delle relazioni (quella su
cui si basa la filosofia dei DB relazionali) permette di
combinare intere relazioni fra loro per ottenere altre
relazioni... ad esempio facendo una SELECT si compiono
una operazione di prodotto multiplo e di proiezione
contemporaneamente.
E' un termine strano ? Sicuramente.
Fuorviante ? Senza dubbio.
Non e' colpa mia pero': quel nome con quel significato
non l'ho scelto io. Se la cosa ti piace ti piace...
se non ti piace non posso farci proprio nulla.
Se poi MySQL non permetteva di eseguire una estrazione
select che coinvolgesse piu' tabelle allora hai ragione.
Quello che mi ha fatto pensare che tu avessi avessi un
errato concetto di cosa si intende con DB Relazionale
e' quando hai detto "relazioni fra tabelle": in questa
accezione "relazioni" non ha nulla a che vedere con il
termine DB "relazionale".
Tutto qui.


alle prove con una panda).
La differenza sostanziale fra DB reticolari o gerarchici e un DB
relazionale e' l'SQL... che permette di eseguire operazioni usando
l'algebra delle relazioni direttamente su degli insiemi di dati (gli
altri DB si interrogano e manipolano ragionando un record per volta).
Se un DB implementa SQL, a mio modo di vedere, si deve definire
relazionale. Chiaro che eseguire determinate query SQL senza una
adatta struttura di supporto e' un suicidio... su query che siano
compatibili con la struttura fisica mi aspetterei una resa decente
(nota che anche i relazionali "puri" hanno problemi seri di
prestazioni se non si fa uno studio molto accurato dei tipi di
query che si vogliono supportare).


piů efficiente.
I DB relazionali esistono da molto piu' tempo di quanto non si
pensi... purtroppo le prestazioni erano cosi' ignobili che come
soluzione risultava improponibile.
Un DB relazionale non e' pero' pensato per essere veloce, ma per
essere flessibile. Ho sentito diversi casi di codice basato su
DB non relazionali che una volta riscritto per DB relazionali
aveva prestazioni notevolmente inferiori (al punto che a volte
si e' dovuti tornare indietro).
Riguardo alla comodita' d'uso di un DB relazionale per scrivere
codice di transazione condivido con te che in fondo non cambia la
vita... la differenza grossa e' sulle interrogazioni estemporanee.
L'approccio CLIPPER (la flessibilita' delle tabelle con la
comodita' di N indici di accesso creati a piacimento) mi sembra
il massimo per la scrittura di codice transazionale. Quello che
ci vorrebbe in piu' e' solo la gestione della concorrenza e
dei rollback :)
Nota che nessuno vieta di usare un DB relazionale in quel modo...
se il codice viene eseguito server-side e se si usa l'SQL statico
(alla DB2) credo che le prestazioni siano paragonabili ad un
sistema CLIPPER-like basato su file indicizzati.
Con SQL in teoria tu scrivi solo cosa vuoi e l'ottimizzatore fa
il resto... in realta' quello che succede e' che devi cercare
di fare la domanda nel modo preciso che fara' scegliere
all'ottimizzatore la strada che tu sai essere quella giusta;
in pratica doppia fatica...
Poi ti capita anche di svegliarti una mattina e scoprire andando
in ufficio che essendo cambiati di un niente alcuni rapporti di
riempimento delle tabelle il tuo job batch (che non usava SQL
statico) invece di metterci 2 ore come al solito e' in macchina
ormai da 9 ore... la gente vuole collegarsi... il sistema e'
down e i telefoni squillano.
(cose che succedono realmente)


 alle prove con una panda).
Non mi sembra un paragone azzeccato. La potenza di un motore non dipende
dal fatto che sia relazionale o meno. Come ho già detto, il motore
relazionale principale del Visual Basic (Jet) è sicuramente di gran
lunga meno efficiente e veloce del motore non relazionale del Clipper.
EMG

Stai parlando a vanvera.
*PLONK*
--
Walkie...@Libero.It (ICQ# 8143647)

 dei rollback :)
Nel Clipper il motore è situato in librerie esterne sostituibili
chiamate RDD (Replaceable Database Driver) e mi sembra che ne esistano
alcuni dotati di funzioni di rollback. Riguardo la concorrenza, mi
piacerebbe sapere esattamente cosa intendi (o cosa si intende) parlando
di gestionali. In realtà Windows stesso già offre un certo grado di
concorrenza indipendentemente dallo strumento che si utilizza (più
finestre sono in grado di portare avanti elaborazioni pseudo-parallele).
EMG

intendi (o cosa si intende) parlando di gestionali.
Intendevo l'accesso in contemporanea da parte di piu' utenti.
In realta' a oggi la mia scelta preferenziale sono transazioni
sequenzializzate che vengono svolte senza attese dell'utente.
Uno compila nelle maschere tutto quello che vuole fare e preme
OK ... a quel punto il tutto viene fatto (e in questo caso, a
parte casi abbastanza particolari, anche sequenzializzare non
e' un problema).


*PLONK*
Sta diventando una collezione.
Onestamente mi spiace piu' per quello di Alex Martelli
(sentire il parere di qualcuno che ne capisce qualcosa
sui miei posting mi avrebbe fatto piacere... peccato)
mentre l'opinione di chi invece non sembra capirci un
granche' e manco ha il coraggio di firmarsi mi interessa,
devo confessare, un pochino meno.
Ma sono io ?
Propongo una votazione... se sono cosi' rompiballe me ne
vado immediatamente.


vado immediatamente.
Assolutamente no, assolutamente no, assolutamente no, assolutamente
no. Resta con noi!!!!
Il Ghenio
-----
ZIO : Fun and games are over with. Anyone who dares
get in my way shall perish.
-----

 devo confessare, un pochino meno.
Allora, su Alex Martelli non volgio davvero discutere. E' bravissimo (lo
dico solo dai post che ho letto) !!!
Quello che ti volgio dire e' che per esempio a me non e' che manchi il
coraggio di firmarmi, ci mancherebbe, sarei un invertebrato. E' diverso, non
voglio scocciature. Quando avevo piu' tempo e militavo su NG di perl, cgi,
javascritp, c, (a volte C++), ai-games, etc... ed avevo il nome e l'email
veri, mi arrivavano un mucchio di richieste di aiuto per email, anche piu'
di una decina al giorno. Non mi e' mai piaciuto ignorarle, ma purtroppo non
potevo vivere per gli altri !
A volte quando si accendeva una discussione mi arrivavano insulti per email
etc...
Insomma, ora partecipo, imparo e qualche cosa la insegno pure :-), ma non ho
piu' scocciature. Tutto qui !!!
Non e' questione di coraggio e nemmeno che vogliamo prendere in giro
qualcuno.
Alex

 Intendevo l'accesso in contemporanea da parte di piu' utenti.
Allora la multiutenza, non la concorrenza. Beh, quella è da sempre
supportata in Clipper, non capisco perché dici che non la supporta.
EMG

 vado immediatamente.
Sei rompiballe? Forse si. Ma se te ne vai anche tu cosa rimane da
leggere su questo ng?...
EMG
PS. Eppure basterebbe essere un pochino piů tolleranti verso le idee
(giuste o sbagliate) del prossimo.

vado immediatamente.
Ho letto il thread. Probabilmente tu hai ragione per i concetti, ma
sei stato il primo ad andare sopra le righe nei modi. Si deve restare
sul tecnico e mai andare sul personale...
Luc.

Un'alternativa e' quella di utilizzare un indirizzo vero, ma riferito ad
una mailbox gratuita, tipo Yahoo o simili, magari specificando nella
signature come stanno le cose. Sta poi a te decidere se e quando andare
a consultarla.
Ciao,
Nicola

 wrote in message
news:3B112360...@flashnet.it...

Quello che intendevo era esemplificare l'accoppiamento di strumenti inadatti a
cooperare per ottenere uno scopo. Effettivamente l'esempio non era dei migliori.
Comunque se il tuo "motore dati" si basa su principi diversi da quello
relazionale (per esempio e' un motore "a oggetti" o "reticolare" o altro) e la
tua interfaccia di accesso e' quella relazionale (SQL) ti ritrovi con un sistema
che funziona ma ... non al meglio.
Il "design" dei dati sarà probabilmente "relazionale" come l'accesso, ma il
tutto verrà rimappato su una struttura fisica differente. Le ottimizzazioni del
motore probabilmente permetterebbero "operazioni" che non puoi esprimere
direttamente (almeno non comodamente) in SQL e le "operazioni" che esprimi in
SQL probabilmente non saranno eseguite con l'efficienza possibile se il motore
le implementasse direttamente.
Quindi l'accoppiata non e' al massimo dell'efficienza. Pero' e' possibile. Ergo
il fatto che un DBMS supporti l'accesso tramite SQL non significa che sia
intrinsecamente basato (e tanto meno che sia ottimizzato) per il modello
relazionale.


"Luc" <TOGL...@katamail.com-TOGLI> wrote in message
news:99d4ht0p1qqlm9lao...@4ax.com...

Sostanzialmente concordo con Luc e gli altri.
Io dico che Andrea, cosi' come tutti quelli che scrivono cose sensate, debbano
rimanere, se il tempo glielo permette.
Che poi alcune volte abbia visto il tono dei messaggi di Andrea salire in
maniera gratuita (come dice Luc) e' anche vero. Sinceramente piu' che darmi
fastidio l'aumento del tono mi da fastidio il fatto che ne sia responsabile
Andrea, ovvero un dei frequentatori che considero "seri" per il contenuto e
l'impegno messo nel NG.
Penso che sia una cosa non voluta. Penso che sia dovuto in parte al carattere in
parte allo stress e alla carenza di tempo e ad altri fattori simili.
Si potrebbe pretendere da Andrea (o da chiunque altro, se per questo) di
prestare attenzione a non alzare i toni senza motivo. E si porebbe invocare un
principio di tolleranza per questa pretesa. Ma sono del parere che lo stesso
principio di tolleranza ci impone di "prendere con le pinze" eventuali alzate di
tono e non rispondere per le rime. Proprio perche' spesso la cosa non e'
intenzionale o colposa. Al massimo preterintenzionale.
A volte una frase frase come "stai parlando a vanvera" non vuole essere
offensiava. Semplicemente rispecchia l'emozione primaria. Se il post di andrea
avesse voluto essere offensivo avrebbe detto SOLO "stai parlando a vanvera".
Invece la frase successiva e': "Il mio non voleva essere un appunto cattivo...
". E segue una spiegazione. Il tono e' sbagliato. Se Andrea invece che un
programmatore fosse un diplomatico retorico invece che "stai parlando a vanvera"
 avrebbe detto "Cavolo, chiedo umilmente scusa. Dalla tua risposta mi rendo
conto che mi sono spiegato malissimo e ti ho fatto fraintendere quello che
volevo dire."
Leggendo fra le righe avrebbe detto la stessa cosa.
Pero' la colpa di Andrea nell'alzare il tono non e' inferiore a quella di chi in
risposta parte in flame e plonk. Quindi, IMHO, chiunque pensi di avere qualche
cosa di sensato da dire deve farlo. E se quello che dice non e' del tutto
sensato (non mi pare comunque il caso di Andrea) al massimo qualcun'altro lo
correggera'.


 query che si vogliono supportare).
Cio' non toglie la possibilità di usare un motore che si basa sul modello X per
gestire dati con una interfaccia e una struttura basata sul modello Y. Che sia o
meno efficiente e' un altro discorso.
L'esempio piu' comune comunque non e' un DBMS reticolare con API relazionale
(ammesso che esista). Ma piuttosto un RDBMS con API OO. Meno efficiente di un
OODBMS vero e proprio ma certamente di molti ordini di grandezza piu' economico!


coraggio di firmarmi, ci mancherebbe, sarei un invertebrato.
Possibile che non l'abbiate ancora capito che WalkieTalkie altro non é
che Andrea la Forgia? E quindi non é affatto anonimo...

(giuste o sbagliate) del prossimo.
Hmmm... quindi se vedo che qualcuno fa un post in cui dice
che nel C++ esiste il "distruttore di copia" che faccio ?
Ignoro per quieto vivere ?


chi in risposta parte in flame e plonk.
Ouch... questo fa male :(
meditero' sul che fare...


grandezza piu' economico!
Hmmm.. qui ti ho perso


Si deve restare sul tecnico e mai andare sul personale...
"Stai parlando a vanvera"
"Stai dicendo una cretinata"
Sono forse affermazioni forti... ma non credo che sia corretto
classificarle come attacchi personali. L'oggetto di discussione
e' l'argomentazione o l'affermazione fatta, non la persona.


e' l'argomentazione o l'affermazione fatta, non la persona.
Si, ma il SOGGETTO è la persona stessa... quindi questi sono attacchi
personali senza ombra di dubbio.
Luc.

 Ignoro per quieto vivere ?
Penso che Enrico, che e' una delle persone piu' cortesi che frequentano
il gruppo, si riferisca al tono piu' che al contenuto dei messaggi.
Tra parentesi il distruttore di copia e' stato argomento di lunghissimi
thread su comp.lang.c++.moderated :-)
Ciao,
Nicola

 Ignoro per quieto vivere ?
No, fai notare l'errore senza alzare i toni. Tanto alzandoli ottieni
solo di arrivare, presto o tardi, "ai ferri corti".
EMG

 Hmmm.. qui ti ho perso
Forse intende qualcosa tipo il Jet (RDBMS) e gli ADO (API OO) di
Microsoft?
EMG

 si riferisca al tono piu' che al contenuto dei messaggi.
Esatto.
EMG

personali senza ombra di dubbio.
ok, ma non vi sembra di esagerare un po'? Rinominiamo il gruppo in
it.lang.italiano.sfumature?
In effetti i toni di andrea erano forse un po' forti, ma secondo me
per niente offensivi. Cmq mi sembra che questo thread sia già troppo
lungo. Che dite, la finiamo qui?
Anto
--
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

thread su comp.lang.c++.moderated :-)
Ma proprio il "distruttore di copia" o la presenza di piu'
distruttori in generale ? In Object Pascal questa e' una
"feature" presente... ma onestamente non l'ho trovata mai
particolarmente interessante (creavo il mio distruttore
standard "Done" senza parametri e usavo sempre quello).


solo di arrivare, presto o tardi, "ai ferri corti".
mea culpa... anche quando discuto di problemi tecnici ho il
problema di infervorarmi :(((
Onestamente non mi capita spesso che pero' i miei interlocutori
se la prendano sul personale.


Microsoft?
Con OODBMS di solito non si intendono della API OO per accedere
ad un DB... si intendono DB nati per archiviare oggetti.
Andrea


personali senza ombra di dubbio.
Hmmm... se invece avessi detto qualcosa come
 "quanto hai affermato ha meno senso del bofonchiare di un ubriaco"
allora sarebbe stato ok ? Io non credo.
Io dico semplicemente che ho usato forse espressioni forti (questo
lo ammetto) ma non credo di essere arrivato ad attaccare chi le
ha espresse in quanto tale. Quello che stonava erano le affermazioni,
non l'autore.
Evidentemente pero' c'e' qualcosa che non va nel mio modo di
esprimermi se anche Alex Martelli ha pensato che quando ho
contestato il paragone fra un passato concreto e le promesse di
un futuro migliore stessi in pratica dandogli dell'imbroglione.


 standard "Done" senza parametri e usavo sempre quello).
Proprio il distruttore di copia. Supponi di voler costruire un'oggetto a
partire dallo stato di un'altro della stessa classe, il quale viene
distrutto immediatamente dopo. Questo avviene ad esempio in alcuni
contenitori STL, quando riorganizzano i propri buffer. Se usi il
costruttore di copia parti effettivamente da un oggetto non
inizializzato, ma *copi* lo stato: allochi nuova memoria, ecc.
class C {
  public:
    C() : p(new int()) {}
    C(const C & c) : p(new int(c->p)) {}
    swap(C & c) { int * t = p; p = c.p; c.p = p; }
  private:
    int * p;
};
template <> void std::swap(C & l, C & r) { l.swap(r); }
Se usi una specializzazione ottimizzata di std::swap presumibilmente non
allochi nuova memoria, ma l'oggetto destinazione e' stato gia' costruito
inutilmente.
Un distruttore di copia dovrebbe consentire di trasferire lo stato
dell'oggetto sorgente, che non lo utilizza piu', sull'oggetto
destinazione, contestualmente alla sua creazione:
C::~C(C & c) : p(c.p) {}  // in questo caso l'oggetto distrutto e' c
Ciao,
Nicola

 meditero' sul che fare...
Azz. Scusa. Intendevo l'opposto. Ovvero "la colpa di andrea ... non e' SUPERIORE
...". Volevo dire di fatto che se ti scappa una parola un po' troppo forte e
dall'altra parte ti rispondono con atteggiamenti ancora piu' forti si ha una
escalation, o un flame, o comunque un qualche cosa di poco produttivo.
Ergo la colpa non e' solo tua. Ma di entrambe gli interlocutori. E' questo che
intendevo. Purtroppo sono incorso nel solito errore di riscrittura
dell'espressione booleana: la edito invertendo l'ordine degli operandi per
motivi di leggibilita' e dimentico di invertire l'operatore. Mi succede spesso.
E a quanto pare non solo con i linguaggi formali!
Pero' se rileggi il resto del messaggio si capiva.
Ti do il permesso di plonkarmi (temporaneamente) per punizione :-)


 se la prendano sul personale.
Quelli che ti conoscono. Ma in un NG non e' sempre cosi'. Ovvio che se anche
avessero qualche ragione, rispondendoti per le rime non si dimostrano certo
tolleranti tanto quanto vorrebbero che tu fossi.
(nota che questa volta l'operatore di paragone l'ho messo giusto anche se la
costruzione grammaticale non e' banale :-)


 Hmmm.. qui ti ho perso
I cosiddetti database ad oggetti sono spesso implementati come un layer su SQL.
Ergo usano una base dati progettata secondo il paradigma relazionale per il lato
"persistente" dei dati. Anche se l'API di accesso e' in realtà OO (o quasi).
Solo "recentemente" (cosa significa questo termine in informatica e' piuttosto
discutibile) sono arrivati a realizzare dei database ad oggetti veri e propri.
Non so dirti molto di piu' perche', dati i costi di questi software, non ho mai
avuto il piacere di usarli veramente. Mi piacerebbe. Ma nella maggior parte dei
casi reali conviene usare HW piu' sofisticati piuttosto che SW di quel tipo. Per
esempio un quadriprocessore con un giga di ram e torretta fibre channel da un
paio di tera fanno miracoli in termini di velocità di elaborazione. E costano
meno.


 ad un DB... si intendono DB nati per archiviare oggetti.
Infatti. Non certo layers OO su SQL (stile ADO).


 un futuro migliore stessi in pratica dandogli dell'imbroglione.
Nel caso di Alex, credo che lui abbia reagito a quella che ha interpretato come
una accusa diretta di scarsa "onesta' intellettuale". Chi ti ha seguito da tempo
e sa che a volte le cose le intendi in maniera letterale (grammaticalmente) e
che quindi la tua accusa era relativa ad una specifica affermazione senza
estendere la cosa a chi l'affermazione l'aveva fatta. Ma come ti dicevo poco fa,
il resto del mondo capisce le cose diversamente. Criticare una affermazione
equivale a criticare chi l'ha fatta in senso personale.
Rileggi in questa chiave la questione sull'articolo sui container associativi e
i passati thread in merito. Forse capirai qualche cosa.


 e' l'argomentazione o l'affermazione fatta, non la persona.
Eccola. Lo dicevo io. Andrea, continua a fare il programmatore. Continua a
postare sul NG. Ma non iniziare una carriera da diplomatico. Sei persino meno a
datto di me. E io sono uno che ogni tanto viene rimproverato perche' dico al
cliente "solo un pirla lo farebbe" senza prima valutare se per caso il cliente
stava pensando di farlo (e mi spiegano che non basta che non lo abbia fatto, e'
offensivo anche solo se pensava che la cosa fosse fattibile). Processo alle
intenzioni. Nel tuo caso e' come dire che "stai dicendo una cretinata" equivale
a "sei un cretino". Io sono d'accordo con te che non e' la stessa cosa. Ma
purtroppo il resto del mondo non la pensa cosi'.


C::~C(C & c) : p(c.p) {}  // in questo caso l'oggetto distrutto e' c
L'implementazione di sposta per una struttura tipo std::vector
potrebbe essere
  template<class T>
  void std::vector<T>::MoveTo(void *dest)
  {
    std::vector<T> *new_one = static_cast<std::vector<T> *>(dest);
    new_one->data=data;
    new_one->size=size;
    new_one->capacity=capacity;
  }
Hmmm... anzi...
forse l'implementazione di default potrebbe essere basata su
uno "sposta-membro-a-membro" del tipo...
  void MyClass::MoveTo(void *dest)
  {
    MyClass *new_one = static_cast<MyClass *>(dest);
    x.MoveTo(&new_one->x);
    y.MoveTo(&new_one->y);
    z.MoveTo(&new_one->z);
  }
con lo spostamento che equivale ad una semplice copiatura
per i tipi nativi.
Hmmm...
non sono convinto che pero' valga la pena di cercarsi
grane del genere... il C++ e' gia' abbastanza complicato
cosi' com'e' ... se la semantica di copia usata dal C++
diventa un problema serio di prestazioni credo che la
soluzione migliore sia evitare di usare la semantica di
copia (es. usando dei container di smart ptr).
Quale era stato il risultato finale della discussione
su comp.lang.c++.moderated ?


i passati thread in merito. Forse capirai qualche cosa.
Io ho cercato di dire in tutti i modi possibili che la colpa
grave in quel caso non e' secondo me di Frosini (colpevole
solamente di non conoscere affatto il C++... delitto di cui si
macchiano in moltissimi) ma di chi era preposto a verificare
che gli articoli fossero di qualita' accettabile... (ovvero
non era colpa di nessuno).
Resto comunque del parere che quell'articolo fosse
un cumulo di str^H^H^H^H^H^H^H^H^H^H^H^H^H^H^H^Hpieno di
inesattezze formali e sostanziali e assolutamente indadatto a
chi si avvicina al C++. Se poi questo un diplomatico non lo deve
dire... pazienza... io per ora mi diverto a scrivere codice.
Tessere le lodi sulla bellezza di scorfani spettinati e vestiti
come pagliacci alle feste all'ambasciata e' un mestiere che
volentieri lascio ad altri.


 volentieri lascio ad altri.
Capisco benissimo la tua posizione. Ma ti faccio notare che questa tua
affermazione potrebbe essere interpretata da una qualunque persona che ha visto
in passato (o in futuro) il suo lavoro o una sua affermazione criticata da parte
tua, come un insulto personale. Come se tu stessi dicendo a Frosini, Martelli
etc. etc. che sono "scorfani spettinati e vestiti come pagliacci".
Per me, e credo per molti altri, e' evidente che non e' assolutamente tua
intenzione dire una cosa del genere. E che non stai facendo affatto riferimento
a nessuno in particolare. Stai solo ammettendo, in modo colorito, di non essere
un diplomatico. Incidentalmente lo dici in un modo che molta gente fraintende.
Speriamo che non ti piovano addosso una serie di plonk! Per me, e per chi ha
sufficiente tolleranza da capire cosa vuoi dire prima di riscaldarsi, sarebbe un
peccato che tu te ne andassi, dato che in genere i tuoi post sono interessanti
ed informati(vi).


 ha scritto nel messaggio
news:3B14AA49...@divalsim.it...

Molto tempo fa anche io scrissi su questo newsgroup una mia
idea per un metodo che 'trasferisse' le risorse di una classe
in quella di un'altra.
In modo naive proponevo l'uso di memcpy (prontamente e giustamente
bacchettata).
Comunque, ritornando al distruttore di copia, sarei propenso
per una sintassi del genere:
C(~C&); // copia su distruzione
C& operator=(~C&); // assegnamento su distruzione.
Per fare un'esempio:
class C
{
    public:
        C()
        : p(new int()) { }
        C(const C& c)
        : p(new int(c.p)) { }
        C& operator=(const C& c)
        {
            delete p;
            p = new int(c.p);
        }
        ~C()
        {
            delete p;
        }
        C(~C& c)
        : p(c.p)
        {
            c.p = 0;
            // al termine del body viene chiamato il distruttore di c
        }
        C& operator=(~C c)
        {
            std::swap(p, c.p);
            // al termine del body viene chiamato il distruttore di c
        }
    private:
        int * p;
};
// esempio
int main()
{
    C c;
    C c2 = (~c);
}
Sembrerebbe interessante.
P.S.
Poichè non ho molto tempo per seguire comp.lang.c++.moderated, mi
potresti gentilmente raccontare l'andamento della discussione?
Saluti e grazie  Manlio Perillo

 potresti gentilmente raccontare l'andamento della discussione?
Non ricordo bene i dettagli, anche perche' fu una discussione fiume. Ci
furono diverse proposte di sintassi alternative, ed un po' di prese di
posizione pro e contro.
A me personalmente pare che non valga molto la pena di esagerare
nell'estendere il linguaggio verso aspetti di basso livello. Nei casi
specifici dove e' necessario questo tipo di efficienza, la si puo'
comunque codificare ad hoc.
Ciao,
Nicola