---
title: C26407
ms.date: 07/21/2017
ms.prod: visual-studio-dev15
ms.topic: conceptual
f1_keywords:
- C26407
helpviewer_keywords:
- C26407
ms.assetid: 5539907a-bfa0-40db-82a6-b860c97209e1
author: mikeblome
ms.author: mblome
manager: douge
ms.workload:
- multiple
ms.openlocfilehash: 1d62554e40d8359b48316c2336daf93cbbfbeb1a
ms.sourcegitcommit: 37fb7075b0a65d2add3b137a5230767aa3266c74
ms.translationtype: MT
ms.contentlocale: it-IT
ms.lasthandoff: 01/02/2019
ms.locfileid: "53849247"
---
# <a name="c26407-dontheapallocateunnecessarily"></a>C26407 DONT_HEAP_ALLOCATE_UNNECESSARILY
Per evitare inutile utilizzo dei puntatori che si prova a rilevare modelli comuni di allocazioni locale, ad esempio quando il risultato di una chiamata all'operatore new viene archiviato in una variabile locale variabile e versioni successiva eliminato in modo esplicito. La regola R.5 supporta: *Preferisce oggetti con ambito, non dell'heap-allocare inutilmente*. La correzione suggerita consiste nell'utilizzare un tipo RAII invece di un puntatore non elaborato e consentono di gestire le risorse. Se un'allocazione è un singolo oggetto, potrebbe essere ovviamente non necessario e una variabile locale di tipo dell'oggetto funzionerà meglio.
## <a name="remarks"></a>Note
- Per ridurre il numero di avvisi, questo modello viene rilevato per solo i puntatori di proprietario. Pertanto, è necessario contrassegnare in modo corretto i proprietari del primo. È possibile estendere facilmente questa opzione per coprire i puntatori non elaborati se si ricevono commenti e suggerimenti dai clienti per supportare tale scenario.
- Il termine oggetto con ambito può essere un po' fuorviante, ma l'idea generale è che è consigliabile usare una variabile locale la cui durata è gestita automaticamente, o un oggetto avanzato che consente di gestire in modo efficiente le risorse dinamiche. Allocazioni heap can di oggetti avanzati del corso, ma non è esplicito nel codice.
- Se l'avviso viene attivato su allocazione di una matrice (che in genere è necessaria per i buffer dinamici), è possibile usare contenitori standard, la correzione o `std::unique_pointer<T[]>`.
- Il modello viene rilevato solo per le variabili locali, in modo che Microsoft non avvisa in caso di casi in cui un'allocazione viene assegnata a, ad esempio, una variabile globale e quindi eliminato nella stessa funzione.
## <a name="example-1-unnecessary-object-allocation-on-heap"></a>Esempio 1: Allocazione di oggetti non necessari nell'heap
```cpp
auto tracer = new Tracer();
ScanObjects(tracer);
delete tracer;  // C26407
```
## <a name="example-2-unnecessary-object-allocation-on-heap-fixed-with-local-object"></a>Esempio 2: Allocazione di oggetti non necessari nell'heap (fissato con oggetti locali)
```cpp
Tracer tracer;  // OK
ScanObjects(&tracer);
```
## <a name="example-3-unnecessary-buffer-allocation-on-heap"></a>Esempio 3: Allocazione di buffer non necessari nell'heap
```cpp
auto value = new char[maxValueSize];
if (ReadSetting(name, value, maxValueSize))
    CheckValue(value);
delete[] value; // C26407
```
## <a name="example-4-unnecessary-buffer-allocation-on-the-heap-fixed-with-container"></a>Esempio 4: Allocazione di buffer non necessari nell'heap (fissato con contenitori)
```cpp
auto value = std::vector<char>(maxValueSize); // OK
if (ReadSetting(name, value.data(), maxValueSize))
    CheckValue(value.data());
```