Donc, je veux mieux comprendre comment fonctionnent les littéraux en C++. Je suis principalement concerné par les situations où vous assignez l'adresse d'une chaîne littérale à un pointeur, et passez-le. Par exemple:À quel point les littéraux de chaîne C++ sont-ils sûrs et fiables?
char* advice = "Don't stick your hands in the toaster.";
Maintenant disons que je viens de passer cette chaîne autour en copiant des pointeurs pour la durée du programme. Bien sûr, ce n'est probablement pas une bonne idée, mais je suis curieux de savoir ce qui se passe réellement dans les coulisses.
Pour un autre exemple, disons que nous faisons une fonction qui renvoie une chaîne littérale:
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
Maintenant, supposons que cette fonction est appelée très souvent, et la chaîne est utilisée seulement littérale environ la moitié du temps, il est appelé :
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
Dans la première situation, que se passe-t-il réellement? La chaîne est-elle juste créée mais non utilisée, et jamais désaffectée?
Dans la deuxième situation, la chaîne va-t-elle être maintenue aussi longtemps que l'utilisateur en aura besoin? Que se passe-t-il quand ce n'est plus nécessaire ... cette mémoire sera-t-elle libérée (en supposant que rien ne pointe plus vers cet espace)? Ne vous méprenez pas, je ne prévois pas d'utiliser des littéraux de chaînes comme celui-ci. Je prévois d'utiliser un conteneur pour garder mes chaînes en échec (probablement std :: string). Je veux surtout savoir si ces situations pourraient causer des problèmes pour la gestion de la mémoire ou des données corrompues.
Les littéraux de chaîne C++ sont parfaitement sûrs et fiables. Ce sont les programmeurs qui utilisent les littéraux de chaînes qui ne sont pas sûrs et fiables. –
C'est ce que je pensais; J'avais juste besoin d'être rassuré, je suppose. Merci. :) –