Anmerkung
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen, dich anzumelden oder die Verzeichnisse zu wechseln.
Der Zugriff auf diese Seite erfordert eine Genehmigung. Du kannst versuchen , die Verzeichnisse zu wechseln.
Vermeiden Sie anrufe
newunddeleteexplizit, verwendenstd::make_unique<T>Sie stattdessen (r.11).
Auch wenn Code keine Aufrufe malloc ist und freewir dennoch vorschlagen, bessere Optionen als die explizite Verwendung von Operatoren new und delete.
C++-Kernrichtlinien:
R.11: Vermeiden Sie es, new und delete explizit aufzurufen
Der ultimative Fix ist die Verwendung intelligenter Zeiger und geeigneter Werksfunktionen, z std::make_unique. B. .
Hinweise
- Die Prüfer warnt bei Aufrufen jeder Art von Operator
newoderdelete: Skalar, Vektor, überladene Versionen (global und klassenspezifisch) und Platzierungsversionen. Der Platzierungsfallnewerfordert möglicherweise einige Klarstellungen in den Kernrichtlinien für vorgeschlagene Fixes und kann in Zukunft weggelassen werden.
Name der Codeanalyse: NO_NEW_DELETE
Beispiele
Dieses Beispiel zeigt, dass C26409 für explizit und explizit newdeleteausgelöst wird. Erwägen Sie stattdessen die Verwendung intelligenter Zeigerfabrikfunktionen, z std::make_unique . B.
void f(int i)
{
int* arr = new int[i]{}; // C26409, warning is issued for all new calls
delete[] arr; // C26409, warning is issued for all delete calls
auto unique = std::make_unique<int[]>(i); // prefer using smart pointers over new and delete
}
Es gibt einen C++-Idiom, der diese Warnung auslöst: delete this. Die Warnung ist beabsichtigt, da die C++-Kernrichtlinien dieses Muster davon abhalten. Sie können die Warnung mithilfe des gsl::suppress Attributs unterdrücken, wie in diesem Beispiel gezeigt:
class MyReferenceCountingObject final
{
public:
void AddRef();
void Release() noexcept
{
ref_count_--;
if (ref_count_ == 0)
{
[[gsl::suppress("i.11")]]
delete this;
}
}
private:
unsigned int ref_count_{1};
};