Bonjour à tous,
J'avais jamais pensé à un truc : si je ne me trompe, le prototype de delete
c'est :
void operator delete( void * );
Alors comment peut-on lui filer un pointeur constant ?
Exemple :
void toto( void * )
{
}
const float * ptr = new float; // pointeur constant
// tenter de convertir le pointeur constant en void *
toto( ptr ); // erreur : normal
void * v = ptr; // erreur : normal
delete ptr; // ça passe, pourquoi ?
C'est stupide je sais, mais, erf, je pige pas!
Merci pour votre aide.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Falk Tannhäuser
Aurélien REGAT-BARREL wrote:
Bonjour à tous, J'avais jamais pensé à un truc : si je ne me trompe, le prototype d e delete c'est : void operator delete( void * ); Alors comment peut-on lui filer un pointeur constant ?
Ça marche par magie : § 5.3.5/2 : "... [Note: a pointer to a const type can be the operand of a delete-expression...]"
Il ne faut pas confondre l'"expression delete" avec la fonction de déal location ("operator delete") décrite dans § 3.7.3.2 (qui, elle, prend effectiv ement un void*), bien que cette dernière soit appelée par la première.
Falk
Aurélien REGAT-BARREL wrote:
Bonjour à tous,
J'avais jamais pensé à un truc : si je ne me trompe, le prototype d e delete
c'est :
void operator delete( void * );
Alors comment peut-on lui filer un pointeur constant ?
Ça marche par magie :
§ 5.3.5/2 : "... [Note: a pointer to a const type can be the operand of a delete-expression...]"
Il ne faut pas confondre l'"expression delete" avec la fonction de déal location
("operator delete") décrite dans § 3.7.3.2 (qui, elle, prend effectiv ement un void*),
bien que cette dernière soit appelée par la première.
Bonjour à tous, J'avais jamais pensé à un truc : si je ne me trompe, le prototype d e delete c'est : void operator delete( void * ); Alors comment peut-on lui filer un pointeur constant ?
Ça marche par magie : § 5.3.5/2 : "... [Note: a pointer to a const type can be the operand of a delete-expression...]"
Il ne faut pas confondre l'"expression delete" avec la fonction de déal location ("operator delete") décrite dans § 3.7.3.2 (qui, elle, prend effectiv ement un void*), bien que cette dernière soit appelée par la première.
Falk
Horst Kraemer
"Aurélien REGAT-BARREL" wrote:
Bonjour à tous, J'avais jamais pensé à un truc : si je ne me trompe, le prototype de delete c'est : void operator delete( void * ); Alors comment peut-on lui filer un pointeur constant ? Exemple :
void toto( void * ) { }
const float * ptr = new float; // pointeur constant
// tenter de convertir le pointeur constant en void * toto( ptr ); // erreur : normal void * v = ptr; // erreur : normal
delete ptr; // ça passe, pourquoi ?
C'est stupide je sais, mais, erf, je pige pas! Merci pour votre aide.
L'opérateur 'delete' du langage C++ utilisé dans l'expression
delete ptr;
n'est *pas* la fonction
void ::operator delete(void*);
bien qu'ils aient le même nom. L'opérateur 'delete' utilise la fonction 'operator delete', mais il s'agit d'un niveau différent.
Bonjour à tous,
J'avais jamais pensé à un truc : si je ne me trompe, le prototype de delete
c'est :
void operator delete( void * );
Alors comment peut-on lui filer un pointeur constant ?
Exemple :
void toto( void * )
{
}
const float * ptr = new float; // pointeur constant
// tenter de convertir le pointeur constant en void *
toto( ptr ); // erreur : normal
void * v = ptr; // erreur : normal
delete ptr; // ça passe, pourquoi ?
C'est stupide je sais, mais, erf, je pige pas!
Merci pour votre aide.
L'opérateur 'delete' du langage C++ utilisé dans l'expression
delete ptr;
n'est *pas* la fonction
void ::operator delete(void*);
bien qu'ils aient le même nom. L'opérateur 'delete' utilise la
fonction 'operator delete', mais il s'agit d'un niveau différent.
Bonjour à tous, J'avais jamais pensé à un truc : si je ne me trompe, le prototype de delete c'est : void operator delete( void * ); Alors comment peut-on lui filer un pointeur constant ? Exemple :
void toto( void * ) { }
const float * ptr = new float; // pointeur constant
// tenter de convertir le pointeur constant en void * toto( ptr ); // erreur : normal void * v = ptr; // erreur : normal
delete ptr; // ça passe, pourquoi ?
C'est stupide je sais, mais, erf, je pige pas! Merci pour votre aide.
L'opérateur 'delete' du langage C++ utilisé dans l'expression
delete ptr;
n'est *pas* la fonction
void ::operator delete(void*);
bien qu'ils aient le même nom. L'opérateur 'delete' utilise la fonction 'operator delete', mais il s'agit d'un niveau différent.
-- Horst
-- Lâche pas la patate!
James Kanze
"Aurélien REGAT-BARREL" writes:
|> J'avais jamais pensé à un truc : si je ne me trompe, le prototype de |> delete c'est : |> void operator delete( void * ); |> Alors comment peut-on lui filer un pointeur constant ? |> Exemple :
|> // tenter de convertir le pointeur constant en void * |> toto( ptr ); // erreur : normal |> void * v = ptr; // erreur : normal
|> delete ptr; // ça passe, pourquoi ?
|> C'est stupide je sais, mais, erf, je pige pas!
Parce que la norme dit que ça doit marcher. C'est stupide, je sais, mais c'est comme ça.
-- James Kanze Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|> J'avais jamais pensé à un truc : si je ne me trompe, le prototype de
|> delete c'est :
|> void operator delete( void * );
|> Alors comment peut-on lui filer un pointeur constant ?
|> Exemple :
|> // tenter de convertir le pointeur constant en void *
|> toto( ptr ); // erreur : normal
|> void * v = ptr; // erreur : normal
|> delete ptr; // ça passe, pourquoi ?
|> C'est stupide je sais, mais, erf, je pige pas!
Parce que la norme dit que ça doit marcher. C'est stupide, je sais, mais
c'est comme ça.
--
James Kanze
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
|> J'avais jamais pensé à un truc : si je ne me trompe, le prototype de |> delete c'est : |> void operator delete( void * ); |> Alors comment peut-on lui filer un pointeur constant ? |> Exemple :
|> // tenter de convertir le pointeur constant en void * |> toto( ptr ); // erreur : normal |> void * v = ptr; // erreur : normal
|> delete ptr; // ça passe, pourquoi ?
|> C'est stupide je sais, mais, erf, je pige pas!
Parce que la norme dit que ça doit marcher. C'est stupide, je sais, mais c'est comme ça.
-- James Kanze Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34