0
votes

Copier la matrice de double constructeur de copie

Je veux créer un constructeur de copie pour ma classe qui dispose d'un tableau double comme membre privé \ Comment puis-je écrire Copy Constructor J'ai essayé le code suivant et il en résulte une erreur xxx

Comment puis-je faire fonctionner ce constructeur de copie?


4 commentaires

"Pourquoi je ne peux pas utiliser ArrayName comme un pointeur?" Parce que deux ne sont pas équivalents


"Pourquoi je ne peux pas utiliser ArrayName comme un pointeur" - parce que les tableaux ne sont pas des pointeurs; Ils agissent simplement comme si elles sont dans des situations spécifiques (dont aucune ne s'applique à ce que vous faites).


Vous n'avez pas besoin de neuf , et vous n'avez pas besoin d'un constructeur de copie. Un constructeur de copie généré du compilateur fonctionnera parfaitement bien.


Sidenote: Vous utilisez * (dp + i) dans un cas et dp [i] dans l'autre. Pourquoi ne pas utiliser ce dernier dans les deux cas et faire dp [i] = c1.dp [i]; ?


3 Réponses :


2
votes
            for(int i=0;i<500;++i)
                *(dp+i)=c1.dp[i];

0 commentaires

1
votes

Bien que vous n'ayez pas besoin d'un comme le compilateur généré, il convient parfaitement à ce cas, il y avait un besoin que vous auriez pu utiliser memmove code> ou std :: copie code> Pour cela.

double array[500];
double dest[500];

std::copy(begin(array), end(array), begin(dest));

::memmove(dest, array, sizeof(double)*500);


1 commentaires

Avec toute implémentation raisonnable de la bibliothèque C ++, std :: copie se transformera en un appel sur MemMove chaque fois que c'est approprié. Alors, stick avec std :: copie . +1.



0
votes

Vous avez déclaré que la variable de membre a déclaré que la variable de membre n'a donc pas besoin d'allouer sa mémoire à l'aide de nouvel opérateur, utilisez simplement le tableau directement xxx

}


0 commentaires