Costruttore con parametri

di il
3 risposte

Costruttore con parametri

Ciao a tutti, non capisco perché nel costruttore a parametri si va a verificare se _p != NULL, qualcuno mi può illuminare?
Allego testo dell'esercizio :

Allo scopo di rappresentare le matrici diagonali n × n in un software per il calcolo scientifico, si realizzi in linguaggio
C++ il template di classe MatDiag, parametrizzato sul tipo T e avente per attributi la dimensione _n della matrice (un
numero intero) e un puntatore _p a un array di _n valori di tipo T, che rappresentano gli elementi sulla diagonale della
matrice (gli altri elementi non si rappresentano, avendo valore pari a 0). Si implementino, inoltre, i seguenti metodi:

o Il costruttore con parametri che riceva come parametri la dimensione n della matrice (un numero intero) ed un
array D di n elementi di tipo T, allochi dinamicamente l’array puntato da _p e vi copi gli elementi di D.
template <typename T>
MatDiag<T>::MatDiag(int n, T D[]) {
 if (n > 0) {
 _p = new T[n];
 if (_p != NULL) {
 for (int k = 0; k < n; k++)
 _p[k] = D[k];
 _n = n; }
 else _n = 0;
 else { _n = 0; _p = NULL; } } 

3 Risposte

  • Re: Costruttore con parametri

    Potrebbe essere codice vecchio (il che non significa obsoleto).
    A partire dallo standard C++98 la new lancia un'eccezione invece di restituire NULL, pertanto quel controllo appena dopo l'allocazione è inutile. Tuttavia se il compilatore è preistorico (pre C++98) allora BOH, nel senso che può restituire sia NULL, sia lanciare un'eccezione, fare altro...


    Se della new ci fosse una malloc() o similari, il controllo è OBBLIGATORIO (pena comportamento indefinito).
  • Re: Costruttore con parametri

    Mi sembra ovvio ... per capire se l'allocazione ha avuto successo ... o non ho capito la domanda..

    P.S. come dice shodan è codice che fa riferimento a vecchie versioni del compilatore o semplicente "portato" dal C senza attenzione...
  • Re: Costruttore con parametri

    Ho capito, grazie mille.
Devi accedere o registrarti per scrivere nel forum
3 risposte