Bonjour à toutes et à tous!
Voilà, j'ai un souci avec un de mes dev.
Je résume rapidement en simplifiant un max.
J'ai une classe de base nomée IOBject. Cette classe ne fais pas grand chose, joue juste le rôle d'interface:
( Edité après que j'ai vu que les tabs ont complètement ravagé le code ^^, et ajout de GetContent pour que vous voyez la méthode.)
Ensuite, j'ai une classe dérivée CHString qui hérite de IObject. voici les infos importantes pour la compréhension de mon problème:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 class IObject { public: virtual char* ToString (void) const { return "IObject"; }; virtual ~IObject () {}; };
NOTEZ BIEN que le type d'objet requis en 2e constructeur est "IObject"...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 // __ctors CHString::CHString() : szContent(NULL) { SetContent(""); } CHString::CHString(const char* szInit) : szContent(NULL) { if (szInit!=szContent) SetContent(szInit); } CHString::CHString(const IObject& cInit) : szContent(NULL) { if (&cInit!=this) SetContent(cInit.ToString()); } // IObject virtual implementation char* CHString::ToString(void) const { return GetContent(); } // Getter on the String's content... char* CHString::GetContent() const { return szContent; } // Set the String content... void CHString::SetContent(const char* szNewContent) { ReallocContent(strlen(szNewContent)); strcpy(szContent, szNewContent); } // Frees the memory used by the content. void CHString::FreeContent() { if (szContent!=NULL) delete [] szContent; } // Changes the size of the allocated content. void CHString::ReallocContent(size_t iNewLength) { try { FreeContent(); szContent = new char[iNewLength+1]; } catch (...) { throw CMemoryErrorEx("Unable to allocate data for a CHString object.", __FILE__, __LINE__); } }
Ensuite, dans mon prog, disons que je fasse ceci:
Les crash sonts soit disant provoqués par "Exception: User breakpoint.", même quand il n'y a pas de breakpoints.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CHString sTestStr1("Test"); // Ca passe... CHString sTestStr2(sTestStr1); // Crash! CHString sTestStr3 = sTestStr2; // Crash!
Notez, qu'après debug du truc, la première instanciation appelle le 2e constructeur. Les deux autres n'appellent AUCUN constructeur
J'ai tenté un changement qui résoud le problème, mais du coup mon programme ne pourra pas fonctionner pour ce que je veux en faire: j'ai changé le type d'objet requis en constructeur 2 pour un "CHString". Et là ça passe, les deux appels se fonts par ce constructeur...
Si quelqu'un a une idée, je suis prenneur ^^
Merci!
Pierrot.
Partager