Code 1:Quand la mémoire, pointée par (char *) en tant que paramètre de fonction est-elle supprimée?
void foo(char * text) {}
foo("Test");
pour autant que je comprends, cela se produira:
mémoire est allouée pour "Test"
- pointeur
est créé et sa valeur est copyed à (char * texte pointeur), donc (char * texte) pointe vers l'endroit en mémoire, où "Test" est (mieux vaut dire, sur le premier caractère de "Test")
après que la fonction est terminée, il détruit le pointeur (texte char *), pointant vers le début de "Test", ne crée-t-il pas une fuite de mémoire?
et la question est, quand la « Test » est supprimé, lorsque la fonction ne détruit que le pointeur
est pas mieux à faire grincer. comme ça? :
char * _text = "Test";
foo(_text);
delete[] _text;
quand je le fais // char * _text = "Test"; foo (_text); // le "Test" sera-t-il également créé en stockage statique? // donc je n'ai pas besoin d'appeler delete? ne serait-il pas préférable d'utiliser const char * _text = "Test"? pourquoi puis-je le passer comme un char *, alors que je suis un const const * –
@Peter: il y a une conversion désapprouvée de la chaîne littérale à non-const 'char *'. Il est là pour prendre en charge le code C hérité avant l'invention de 'const' (en notation d'échecs, on écrirait (?!) Ici). L'utiliser * ne permet pas de modifier les données vers lesquelles il pointe, cela a juste le même effet que de supprimer const d'un pointeur avec un 'const_cast'. Si vous voulez quelque chose que vous pouvez modifier, vous pouvez écrire 'char text [] =" Test ";' - cela place un tableau sur la pile et copie la chaîne littérale dans ce tableau, ainsi vous pouvez modifier la copie. Comme toute autre variable automatique, sa durée de vie est sa portée. –