OVH Cloud OVH Cloud

Construrcteur de classe mère non appelé

2 réponses
Avatar
Geoffroy Baud
Bonjour,

Je suis un newbie en C++.
Comment ce fait-il que le contructeur
de la classe mère ne soie pas appeler.


J'ai un classe de gestion memoirs (surcharge de new
et delete)qui encapsule des fonctions en C proprio
je fais hérité toutes les autres classes qui en ont besoin
de celle-ci pour ne pas surcharger les operateurs globaux.

namespace dps
{
class CMemory
{
public:
CMemory(){
// init de la lib memoirs
openMgr(); // ouvertur du gestionnaire
initMgr(&mp); // init de la clef de session
// pour le gestionnaire
}

void *operator new (size_t size)throw(std::bad_alloc){
void *p = NULL;
getMem(mp, &p, size); // allocation en fonction
// de la clef
if (!p){
throw(std::bad_alloc);
return p;
}

void operator delete(void* p)throw(){
if (p==NULL)
return;
if (!delMem(mp,p)) // desallocation
throw();
}

vitual CMemory(){
close(&mp); //fermeturs de la clef
}


private:
void *mp; // ptr sur la clef du
// gestionnaire de mem
};
}



namespace dps
{
class CNetwork: public CMemory
{
public:
CNetwork(const char *paddress, uint16 port):CMemory();

~CNetwork();

std::string *getAddress(){return mpaddress};

uint16 getPort(){return mport};

uint getSocket(){return msocket};

int read(char *pbuffer, size_t size) {} = 0;

int write(char *pbuffer, size_t size){} = 0;

bool connect();
private:
int msocket;
std::string *mpaddress;
uint16 mport;

}
}



Mon soucis est que le contructeur de CMemory n'est pas
appeler donc abort();

et je n'arrive pas a comprendre pourquoi.

merci.

2 réponses

Avatar
Jean-Marc Bourguet
Geoffroy Baud writes:

Mon soucis est que le contructeur de CMemory n'est pas
appeler donc abort();


Dans

dps::CNetwork* var = new dps::CNetwork(host, port);

Le constructeur de CMemory est appele apres l'appel a l'operateur new
(ce qui est normal, c'est difficile d'appeler un constructeur si on ne
sait pas ou il faut construire). Je suppose que c'est lui qui cause
l'abort.

Tu dois t'arranger differemment pour initialiser ton systeme de
gestion de memoire.

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Geoffroy Baud
Geoffroy Baud writes:

Mon soucis est que le contructeur de CMemory n'est pas
appeler donc abort();


Dans

dps::CNetwork* var = new dps::CNetwork(host, port);

Le constructeur de CMemory est appele apres l'appel a l'operateur new
(ce qui est normal, c'est difficile d'appeler un constructeur si on ne
sait pas ou il faut construire). Je suppose que c'est lui qui cause
l'abort.

Tu dois t'arranger differemment pour initialiser ton systeme de
gestion de memoire.

A+



Merci beaucoup et bonne journée, bon week-end