E2157 La suppression d'un objet nécessite exactement un opérateur de conversion en pointeur (C++)
Remonter à Erreurs et avertissements du compilateur (C++) - Index
Si une personne utilise l'opérateur 'delete' sur un objet (pas un pointeur sur un objet, mais l'objet lui-même), le standard exige de définir exactement un "opérateur de conversion en pointeur" qui produira le pointeur libéré.
Exemple 1 :
class T2DTranslation {
// ...
};
int _tmain(int argc, _TCHAR* argv[]) {
T2DTranslation t;
delete t; // E2157
return 0;
}
Exemple 2 :
#include <stdio.h>
class T2DTranslation {
private:
int *coord;
public:
T2DTranslation() {
coord = new int[3];
}
operator int *() {
puts("Conversion...");
return coord;
}
};
int _tmain(int argc, _TCHAR* argv[]) {
T2DTranslation t;
delete t;
return 0;
}
Dans le second exemple, comme 't' n'est pas un pointeur, mais un objet, le compilateur supprimera 'coord', car c'est ce que l'opérateur de conversion en pointeur de l'objet offre. Vous ne pouvez pas avoir plusieurs opérateurs de conversion en pointeur, car le compilateur ne saurait pas lequel appeler.
Ce message peut aussi apparaître si delete[] a été appelé sans être nécessaire (par exemple, vous pouvez appeler delete lorsque vous utilisez des pointeurs sur la mémoire dynamique, mais pas lorsque vous utilisez des pointeurs sur un vecteur de type int).