Avertissement C26409
Évitez d’appeler
new
etdelete
explicitement, utilisezstd::make_unique<T>
plutôt (r.11).
Même si le code est propre d’appels à malloc
et , nous vous suggérons toujours de considérer de meilleures options que l’utilisation explicite d’opérateurs new
et delete
.free
Recommandations principales en C++ :
R.11 : Éviter d’appeler explicitement de nouveaux appels et de supprimer
Le correctif ultime consiste à utiliser des pointeurs intelligents et des fonctions d’usine appropriées, telles que std::make_unique
.
Notes
- Le case activée er avertit les appels à n’importe quel type d’opérateur
new
oudelete
: scalaire, vecteur, versions surchargées (globales et spécifiques à la classe) et versions de placement. Le cas de placementnew
peut nécessiter des clarifications dans les Recommandations de base pour les correctifs suggérés et peut être omis à l’avenir.
Nom de l’analyse du code : NO_NEW_DELETE
Exemples
Cet exemple montre que C26409 est déclenché pour explicite new
et delete
. Envisagez plutôt d’utiliser des fonctions de fabrique de pointeur intelligentes, comme std::make_unique
à la place.
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
}
Il existe un idiome C++ qui déclenche cet avertissement : delete this
. L’avertissement est intentionnel, car les recommandations de base C++ découragent ce modèle. Vous pouvez supprimer l’avertissement à l’aide de l’attribut gsl::suppress
, comme illustré dans cet exemple :
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};
};
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : tout au long de 2024, nous allons éliminer 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, consultez :Envoyer et afficher des commentaires pour