J'ai une classe appelée Node
qui a deux constructeurs. Lorsque j'essaie d'appeler l'un des constructeurs de l'autre et de l'assigner à la mémoire pointée par celui-ci de l'appelant, je n'obtiens aucune erreur. Mais quand j'essaye d'assigner mémoire/objet alloué sur le tas en utilisant new
à this
j'obtiens une erreur l'expression n'est pas assignable. Voici mon code. Quelles pourraient être les raisons possibles?Allocation de mémoire à cet objet en C++
class Node{
private:
int key;
Node* left, *right;
public:
Node(){
left=NULL;
right= NULL;
}
Node(int data){
this=new Node(); // generates error 'expression is not assignable'
*this= Node(); //compiles succesfully
this->key=data;
}
}
Btw votre deuxième ligne (* this = node();) crée un objet de nœud temporaire, puis en utilisant l'opérateur d'affectation par défaut fourni par le compilateur (Noeud opérateur :: = (const Node &)) pour copier l'état du Node temporaire sur l'état du premier objet Node, puis détruire l'objet Node temporaire. Cela fonctionne, mais je pense que vous feriez mieux d'éviter cela et de simplement initialiser directement les valeurs des membres. –
@JeremyFriesner * "vous ne pouvez pas appeler un constructeur d'un autre constructeur en C++" * - Vous pouvez en C++ 11. – cdhowie
@cdhowie vous avez raison, j'avais oublié que :) –