Est-il possible de vérifier qu'un pointeur intélligent est bien alloué ou
pas ?
style :
auto_ptr <TypeVariable> ptr (new TypeVariable ("Toto"));
if (ptr) {
}
auto_ptr n'est pas alloué mais c'est un pointeur sur TypeVariable qui est
bonjour,
Est-il possible de vérifier qu'un pointeur intélligent est bien alloué ou
pas ?
style :
auto_ptr <TypeVariable> ptr (new TypeVariable ("Toto"));
if (ptr) {
}
Je pose la question, car je l'avais mis dans un 'try' 'catch' en espérant
que si l'allocation
se déroulerait mal, celui-ci lancerait une exception, mais rien de tel ne
se produit.
Merci,
Stéphane
Est-il possible de vérifier qu'un pointeur intélligent est bien alloué ou
pas ?
style :
auto_ptr <TypeVariable> ptr (new TypeVariable ("Toto"));
if (ptr) {
}
auto_ptr n'est pas alloué mais c'est un pointeur sur TypeVariable qui est
bonjour,
Est-il possible de vérifier qu'un pointeur intélligent est bien alloué ou
pas ?
style :
auto_ptr <TypeVariable> ptr (new TypeVariable ("Toto"));
if (ptr) {
}
Je pose la question, car je l'avais mis dans un 'try' 'catch' en espérant
que si l'allocation
se déroulerait mal, celui-ci lancerait une exception, mais rien de tel ne
se produit.
Merci,
Stéphane
Est-il possible de vérifier qu'un pointeur intélligent est bien alloué ou
pas ?
style :
auto_ptr <TypeVariable> ptr (new TypeVariable ("Toto"));
if (ptr) {
}
auto_ptr n'est pas alloué mais c'est un pointeur sur TypeVariable qui est
bonjour,
Est-il possible de vérifier qu'un pointeur intélligent est bien alloué ou
pas ?
style :
auto_ptr <TypeVariable> ptr (new TypeVariable ("Toto"));
if (ptr) {
}
Je pose la question, car je l'avais mis dans un 'try' 'catch' en espérant
que si l'allocation
se déroulerait mal, celui-ci lancerait une exception, mais rien de tel ne
se produit.
Merci,
Stéphane
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
Merci de l'information,
Voici un exemple de ce que j'ai codé afin de répondre à mon problème
d'auto_ptr;
Pourriez-vous me dire ce que vous en pensez ?
Attention, Il ne s'agit que d'un exemple, je viens de le coder dans mon
client mail.
Donc il se peut qu'il ne compile pas ;-)
#include <iostream>
#include <memory>
#include <exception>
using namespace std;
enum TypeImportFile {
TextImportFile = 0,
BinaryImportFile
};
class ImportFile {
public:
ImportFile (TypeImportFile p_Type) : m_Type (p_Type) {
}
virtual ~ImportFile () = 0;
TypeImportFile GetType (void) {
return m_Type;
}
};
class TextImportFile : public ImportFile {
public:
TextImportFile (void) : ImportFile (TextImportFile) {
}
~TextImportFile (void) {
}
};
class BinaryImportFile : public ImportFile {
public :
BinaryImportFile (void) : ImportFile (BinaryImportFile) {
}
~BinaryImportFile (void) {
}
};
class TypeImportFileNotFoundException : public exception {
public:
TypeImportFileNotFoundException (TypeImportFile p_Type) : m_Type (p_Type)
{
}
const char *what () {
return "Type non trouvé";
}
private:
TypeImportFile m_Type;
};
auto_ptr <ImportFile> GetImportFile (TypeImportFile p_Type) {
switch (p_Type) {
case TextImportFile:
return auto_ptr <ImportFile> (new TextImportFile());
case BinaryImportFile:
return auto_ptr <ImportFile> (new BinaryImportFile());
default :
throw TypeImportFileNotFoundException (p_Type);
}
}
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
}
Merci
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
Merci de l'information,
Voici un exemple de ce que j'ai codé afin de répondre à mon problème
d'auto_ptr;
Pourriez-vous me dire ce que vous en pensez ?
Attention, Il ne s'agit que d'un exemple, je viens de le coder dans mon
client mail.
Donc il se peut qu'il ne compile pas ;-)
#include <iostream>
#include <memory>
#include <exception>
using namespace std;
enum TypeImportFile {
TextImportFile = 0,
BinaryImportFile
};
class ImportFile {
public:
ImportFile (TypeImportFile p_Type) : m_Type (p_Type) {
}
virtual ~ImportFile () = 0;
TypeImportFile GetType (void) {
return m_Type;
}
};
class TextImportFile : public ImportFile {
public:
TextImportFile (void) : ImportFile (TextImportFile) {
}
~TextImportFile (void) {
}
};
class BinaryImportFile : public ImportFile {
public :
BinaryImportFile (void) : ImportFile (BinaryImportFile) {
}
~BinaryImportFile (void) {
}
};
class TypeImportFileNotFoundException : public exception {
public:
TypeImportFileNotFoundException (TypeImportFile p_Type) : m_Type (p_Type)
{
}
const char *what () {
return "Type non trouvé";
}
private:
TypeImportFile m_Type;
};
auto_ptr <ImportFile> GetImportFile (TypeImportFile p_Type) {
switch (p_Type) {
case TextImportFile:
return auto_ptr <ImportFile> (new TextImportFile());
case BinaryImportFile:
return auto_ptr <ImportFile> (new BinaryImportFile());
default :
throw TypeImportFileNotFoundException (p_Type);
}
}
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
}
Merci
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
Merci de l'information,
Voici un exemple de ce que j'ai codé afin de répondre à mon problème
d'auto_ptr;
Pourriez-vous me dire ce que vous en pensez ?
Attention, Il ne s'agit que d'un exemple, je viens de le coder dans mon
client mail.
Donc il se peut qu'il ne compile pas ;-)
#include <iostream>
#include <memory>
#include <exception>
using namespace std;
enum TypeImportFile {
TextImportFile = 0,
BinaryImportFile
};
class ImportFile {
public:
ImportFile (TypeImportFile p_Type) : m_Type (p_Type) {
}
virtual ~ImportFile () = 0;
TypeImportFile GetType (void) {
return m_Type;
}
};
class TextImportFile : public ImportFile {
public:
TextImportFile (void) : ImportFile (TextImportFile) {
}
~TextImportFile (void) {
}
};
class BinaryImportFile : public ImportFile {
public :
BinaryImportFile (void) : ImportFile (BinaryImportFile) {
}
~BinaryImportFile (void) {
}
};
class TypeImportFileNotFoundException : public exception {
public:
TypeImportFileNotFoundException (TypeImportFile p_Type) : m_Type (p_Type)
{
}
const char *what () {
return "Type non trouvé";
}
private:
TypeImportFile m_Type;
};
auto_ptr <ImportFile> GetImportFile (TypeImportFile p_Type) {
switch (p_Type) {
case TextImportFile:
return auto_ptr <ImportFile> (new TextImportFile());
case BinaryImportFile:
return auto_ptr <ImportFile> (new BinaryImportFile());
default :
throw TypeImportFileNotFoundException (p_Type);
}
}
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
}
Merci
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
Je ne vois pas où tu gères l'exception std::bad_alloc.
Si tu compile sous VC++,le mieux c'est de tester le retour de new car à ma
connaissance il ne lance pas cette exception.
donc en modifiant légèrement ton code:
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
if (importFile.get()) // l'opérateur new de VC++ renvoie 0 si
l'allocation échoue
{
importFile->SaveToDatabase ();
}
} catch(std::bad_alloc& badAlloc) //pour les compilo qui se conforment à
la norme
{
... ton traitement ...
}
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
Merci Ahmed,
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
Je ne vois pas où tu gères l'exception std::bad_alloc.
Si tu compile sous VC++,le mieux c'est de tester le retour de new car à ma
connaissance il ne lance pas cette exception.
donc en modifiant légèrement ton code:
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
if (importFile.get()) // l'opérateur new de VC++ renvoie 0 si
l'allocation échoue
{
importFile->SaveToDatabase ();
}
} catch(std::bad_alloc& badAlloc) //pour les compilo qui se conforment à
la norme
{
... ton traitement ...
}
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
Merci Ahmed,
int main (int argc, char **argv) {
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
importFile->SaveToDatabase ();
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
return 0;
Je ne vois pas où tu gères l'exception std::bad_alloc.
Si tu compile sous VC++,le mieux c'est de tester le retour de new car à ma
connaissance il ne lance pas cette exception.
donc en modifiant légèrement ton code:
try {
auto_ptr <ImportFile> importFile = GetImportFile (BinaryImportFile);
if (importFile.get()) // l'opérateur new de VC++ renvoie 0 si
l'allocation échoue
{
importFile->SaveToDatabase ();
}
} catch(std::bad_alloc& badAlloc) //pour les compilo qui se conforment à
la norme
{
... ton traitement ...
}
} catch (TypeImportFileNotFoundException& pException) {
cout << "Une exception a été levée : " << pException.what () << endl;
}
Merci Ahmed,
Concernant le compilateur, il s'agit soit de C++ Builder ou de GCC,
mais j'ai une plus grosse préférence pour GCC.
Concernant le compilateur, il s'agit soit de C++ Builder ou de GCC,
mais j'ai une plus grosse préférence pour GCC.
Concernant le compilateur, il s'agit soit de C++ Builder ou de GCC,
mais j'ai une plus grosse préférence pour GCC.
Quel que soit le compilateur (GCC, VC - pour BC il faudrait vérifier),
les versions récentes de ces compilos lèvent std::bad_alloc. Pour les
versions plus ancienens ,il faut vérifier.
Quel que soit le compilateur (GCC, VC - pour BC il faudrait vérifier),
les versions récentes de ces compilos lèvent std::bad_alloc. Pour les
versions plus ancienens ,il faut vérifier.
Quel que soit le compilateur (GCC, VC - pour BC il faudrait vérifier),
les versions récentes de ces compilos lèvent std::bad_alloc. Pour les
versions plus ancienens ,il faut vérifier.
Ce qui me fait peur, c'est que lorsque le soft est en
run-time, il n'y a pas d'exception levée si le pointeur est à
0, alors qu'il ne devrait pas le permettre, si il le permet
alors il y a un segfault qui se produit, ce qui est normal.
Ce qui me fait peur, c'est que lorsque le soft est en
run-time, il n'y a pas d'exception levée si le pointeur est à
0, alors qu'il ne devrait pas le permettre, si il le permet
alors il y a un segfault qui se produit, ce qui est normal.
Ce qui me fait peur, c'est que lorsque le soft est en
run-time, il n'y a pas d'exception levée si le pointeur est à
0, alors qu'il ne devrait pas le permettre, si il le permet
alors il y a un segfault qui se produit, ce qui est normal.
Concernant Boost, est-ce qu'il existe des pointeurs intelligents
ayant une meilleure conception ?
Concernant Boost, est-ce qu'il existe des pointeurs intelligents
ayant une meilleure conception ?
Concernant Boost, est-ce qu'il existe des pointeurs intelligents
ayant une meilleure conception ?
d'accord avec toi alexandre,
Je n'ai pas essayé ce code sous BCB6, parce qu'il s'agit d'un
code d'essai et que je n'aurais pas pû l'intégrer dans le code
actuel de l'application.
Mais cela me dérange tout de même que l'on puisse faire un
"auto_ptr <TypeVariable> ptr (0)"
Parce que en pratique, si on fait ptr->Print (), ptr étant =
0, on obtient un SegFault.
N'y aurait-il pas un bug ?
Concernant Boost, est-ce qu'il existe des pointeurs
intelligents ayant une meilleure conception ?
d'accord avec toi alexandre,
Je n'ai pas essayé ce code sous BCB6, parce qu'il s'agit d'un
code d'essai et que je n'aurais pas pû l'intégrer dans le code
actuel de l'application.
Mais cela me dérange tout de même que l'on puisse faire un
"auto_ptr <TypeVariable> ptr (0)"
Parce que en pratique, si on fait ptr->Print (), ptr étant =
0, on obtient un SegFault.
N'y aurait-il pas un bug ?
Concernant Boost, est-ce qu'il existe des pointeurs
intelligents ayant une meilleure conception ?
d'accord avec toi alexandre,
Je n'ai pas essayé ce code sous BCB6, parce qu'il s'agit d'un
code d'essai et que je n'aurais pas pû l'intégrer dans le code
actuel de l'application.
Mais cela me dérange tout de même que l'on puisse faire un
"auto_ptr <TypeVariable> ptr (0)"
Parce que en pratique, si on fait ptr->Print (), ptr étant =
0, on obtient un SegFault.
N'y aurait-il pas un bug ?
Concernant Boost, est-ce qu'il existe des pointeurs
intelligents ayant une meilleure conception ?