Warnung C26815
Der Zeiger ist dangling, da er auf eine temporäre Instanz zeigt, die zerstört wurde. (ES.65)
Hinweise
Der erstellte Zeiger oder die erstellte Ansicht bezieht sich auf ein unbenanntes temporäres Objekt, das am Ende der Anweisung zerstört wird. Der Zeiger oder die Ansicht schuppt.
Diese Überprüfung erkennt Ansichten und Besitzer aus der C++-Standardvorlagenbibliothek (STL). Verwenden Sie die [[msvc::lifetimebound]]
Anmerkung, um diese Überprüfung über vom Benutzer erstellte Typen zu vermitteln.
Die [[msvc::lifetimebound]]
Unterstützung ist neu in MSVC 17.7.
Codeanalysename: LIFETIME_LOCAL_USE_AFTER_FREE_TEMP
Beispiel
Berücksichtigen Sie den folgenden Code, der in einer C++-Version vor C++23 kompiliert wurde:
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
}
Diese Warnungen können durch Erweitern der Lebensdauer des temporären Objekts behoben werden.
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();
}
Siehe auch
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für