Avertissement C26815
Le pointeur est déchaîné, car il pointe vers une instance temporaire qui a été détruite. (ES.65)
Notes
Le pointeur ou la vue créé fait référence à un objet temporaire sans nom détruit à la fin de l’instruction. Le pointeur ou la vue s’affiche.
Cette case activée reconnaît les vues et les propriétaires de la bibliothèque de modèles standard C++ (STL). Pour enseigner cette case activée sur les types créés par l’utilisateur, utilisez l’annotation[[msvc::lifetimebound]]
.
La [[msvc::lifetimebound]]
prise en charge est nouvelle dans MSVC 17.7.
Nom de l’analyse du code : LIFETIME_LOCAL_USE_AFTER_FREE_TEMP
Exemple
Considérez le code suivant compilé dans une version C++ avant C++23 :
std::optional<std::vector<int>> getTempOptVec();
void loop() {
// Oops, the std::optional value returned by getTempOptVec gets deleted
// because there is no reference to it.
for (auto i : *getTempOptVec()) // warning C26815
{
// do something interesting
}
}
void views()
{
// Oops, the 's' suffix turns the string literal into a temporary std::string.
std::string_view value("This is a std::string"s); // warning C26815
}
struct Y { int& get() [[msvc::lifetimebound]]; };
void f() {
int& r = Y{}.get(); // warning C26815
}
Ces avertissements peuvent être résolus en étendant la durée de vie de l’objet temporaire.
std::optional<std::vector<int>> getTempOptVec();
void loop() {
// Fixed by extending the lifetime of the std::optional value by giving it a name.
auto temp = getTempOptVec();
for (auto i : *temp)
{
// do something interesting
}
}
void views()
{
// Fixed by changing to a constant string literal.
std::string_view value("This is a string literal");
}
struct Y { int& get() [[msvc::lifetimebound]]; };
void f() {
Y y{};
int& r = y.get();
}
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour