Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Se fallisce, new restituisce sempre NULL?
Forum - C/C++ - Se fallisce, new restituisce sempre NULL? - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
AldoBaldo (Member)
Guru


Messaggi: 705
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 23:09
Martedì, 29/09/2015
Ah, quella! Di solito ci arrivo con il menu Start=>Esegui..., che è poi la stessa cosa.
L'ho fatto, parte la classica console tipo DOS che snocciola una quantità di testo (illeggibile, vista la velocità fulminea) e si richiude immediatamente. Penso che neppure un X-Man riuscirebbe a leggere a quella velocità. Comunque direi che dovrebbe essere irrilevante: la versione sarà 4.7.1, no? E comunque ormai ho risolto col test che ho messo insieme con le vostre informazioni, quindi non ho più bisogno di saperlo. Certo, rimane la curiosità fine a se stessa, ma posso conviverci. :)

Edit: no, non posso conviverci... infatti un paio di giorni dopo ho dovuto riprendere la questione e, in effetti, usando cmd e dopo indicando i dovuti percorsi e nome dell'eseguibile ho scoperto che... la versione è veramente 4.7.1. Be', comunque ho imparato un altro dettaglio. Un ulteriore grazie a lumo e TheDarkJuster (in ordine alfabetico :) ).

Ultima modifica effettuata da AldoBaldo il 01/10/2015 alle 8:25


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 23:51
Martedì, 29/09/2015
Non hai capito ... Nella finestra esegui devi scrivere cmd

Poi si apre la finestra nera del dos in cui otterrai la versione

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 13:08
Mercoledì, 30/09/2015
Per curiosità, si può facilmente indicare a new di non lanciare eccezioni e di ritornare nullptr in caso di fallimento:
http://www.cplusplus.com/reference/new/nothrow/

Sinceramente però non è una cosa che ho visto fare spesso.

Ultima modifica effettuata da lumo il 30/09/2015 alle 13:09
PM Quote
Avatar
AldoBaldo (Member)
Guru


Messaggi: 705
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 23:51
Mercoledì, 30/09/2015
Questa del nothrow non l'avevo mai notata! Grazie per averla evidenziata. Ho preso nota anche se, hai ragione, non credo che userò mai quella caratteristica. Potrei farci un pensierino se fosse prevista una istruzione che modificasse una volta e per tutte nel programma il comportamento di new, ma dovere ad ogni chiamata specificare che si vuole l'opzione nothrow mi sembra davvero poco allettante, anche nel caso in cui uno apprezzasse la restituzione di puntatori NULL.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 15:09
Giovedì, 01/10/2015
Testo quotato

Postato originariamente da AldoBaldo:

Questa del nothrow non l'avevo mai notata! Grazie per averla evidenziata. Ho preso nota anche se, hai ragione, non credo che userò mai quella caratteristica. Potrei farci un pensierino se fosse prevista una istruzione che modificasse una volta e per tutte nel programma il comportamento di new, ma dovere ad ogni chiamata specificare che si vuole l'opzione nothrow mi sembra davvero poco allettante, anche nel caso in cui uno apprezzasse la restituzione di puntatori NULL.



E' per questa ragione che, anche se non credo esistano più, ho visto librerie "standard" con il nothrow "incorporato"..........

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:05
Giovedì, 01/10/2015
Testo quotato

Postato originariamente da TheDarkJuster:
E' per questa ragione che, anche se non credo esistano più, ho visto librerie "standard" con il nothrow "incorporato"..........



Che vuoi dire con "incorporato"??

Fa parte tutto dello standard C++. Il comportamento normale prevede l'eccezione ma il nothrow è previsto dallo standard e se vuoi puoi usarlo.


PM Quote
Avatar
TheDarkJuster (Member)
Guru^2


Messaggi: 1620
Iscritto: 27/09/2013

Segnala al moderatore
Postato alle 20:14
Giovedì, 01/10/2015
è come se il nothrow fosse sempre presente senza poterlo levare...... Sono state compilate così. Non chidermi perchè, ma c'erano versione modificate (da terzi) della libreria standard compresa con clang (molto probabilmente modificata e) compilata in quello strano modo.

PM Quote
Avatar
lumo (Member)
Expert


Messaggi: 449
Iscritto: 18/04/2010

Segnala al moderatore
Postato alle 15:52
Sabato, 03/10/2015
Testo quotato

Postato originariamente da AldoBaldo:

Questa del nothrow non l'avevo mai notata! Grazie per averla evidenziata. Ho preso nota anche se, hai ragione, non credo che userò mai quella caratteristica. Potrei farci un pensierino se fosse prevista una istruzione che modificasse una volta e per tutte nel programma il comportamento di new, ma dovere ad ogni chiamata specificare che si vuole l'opzione nothrow mi sembra davvero poco allettante, anche nel caso in cui uno apprezzasse la restituzione di puntatori NULL.



Se proprio vuoi divertirti in realtà potresti, ti è sufficiente fare l'overload di ::operator new.
In questo modo potresti liberarti dell'eccezione, anche se a dire il vero non sarebbe questo il suo scopo. Il comportamento dovrebbe rimanere indifferente (ossia se c'è un errore deve lanciare bad_alloc), ti permette però di utilizzare un pool di memoria custom (e anche qui magari sarebbe meglio usare i container, in molti casi

http://en.cppreference.com/w/cpp/memory/new/operator_new

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo