constructeur de copie: problème pour dupliquer correctement l'objet
Bonjour,
je cherche à manipuler la copie d'un objet, grâce au code réduit suivant:
Code:
1 2
| CXmlFile f = _xml_file;
f.SetTraversalMode(M_PRE_ORDER); |
La méthode appelée reste bloquée dans une boucle infinie. Quand je manipule l'objet original:
Code:
1 2
| CXmlFile &f = _xml_file;
f.SetTraversalMode(M_PRE_ORDER); |
le message est envoyé correctement; si mes souvenirs sont bons, lorsqu'on initialise un objet au moment de sa déclaration, c'est le constructeur de copie qui est utilisé (et non l'opérateur =). Je pensais que celui par défaut suffirait pour cette classe dont voici la définition:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#ifndef _CXMLFILE_H
#define _CXMLFILE_H
#include <stack>
#include <queue>
#include "tinyxml.h"
enum
{
M_PRE_ORDER,
M_LEVEL_ORDER
};
typedef TiXmlNode CXmlNode;
class CXmlFile
{
public:
CXmlFile() {}
~CXmlFile() {}
public:
CXmlNode *Open(const char *file);
CXmlNode *NextNode();
CXmlNode *CurrentNode() {return _node;}
public:
void SetTraversalMode(const int mode);
private:
void init_node_stack();
void init_node_queue();
private:
TiXmlDocument _doc;
CXmlNode *_node;
std::stack<CXmlNode *> _stack;
std::queue<CXmlNode *> _fifo;
int _mode;
public:
static int NodeDepth(const CXmlNode *node);
static const char *GetAttribute(const CXmlNode *node, const char *key);
};
#endif // _CXMLFILE_H |
J'y ai donc rajouté le constructeur de copie suivant:
Code:
CXmlFile(const CXmlFile ©) : _doc(copy._doc), _node(copy._node), _stack(copy._stack), _fifo(copy._fifo), _mode(copy._mode) {}
Mais le problème de départ persiste (surement parce que le constructeur de copie généré par défaut doit être le meme que celui-ci)... j'avoue que c'est la première fois que je suis amené à créer un constructeur de copie à la mano. Quelqu'un pourrait m'aiguiller vers une solution? :)
Thx!