Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
'class_type': impossibile intercettato come distruttore e/o costruttore di copia non accessibile o eliminato
Osservazioni:
È stata rilevata un'eccezione per valore o per riferimento, ma il costruttore di copia, l'operatore di assegnazione o entrambi non sono accessibili.
Le modifiche di conformità in Visual Studio 2015 hanno reso questo errore applicabile alle istruzioni catch non valide delle eccezioni MFC derivate da CException. Poiché CException ha un costruttore di copia privata ereditato, la classe e i suoi derivati non sono copiabili e non possono essere passati per valore, il che significa anche che non possono essere intercettati per valore. Le istruzioni Catch che hanno rilevato eccezioni MFC per valore in precedenza hanno causato eccezioni non rilevate in fase di esecuzione. Ora il compilatore identifica correttamente questa situazione e segnala l'errore C2316. Per risolvere questo problema, è consigliabile usare le macro TRY/CATCH MFC anziché scrivere gestori di eccezioni personalizzati. Se non è appropriato per il codice, intercettare invece le eccezioni MFC per riferimento.
Esempio
L'esempio seguente genera l'errore C2316 e mostra un modo per correggerlo:
// C2316.cpp
// compile with: /EHsc
#include <stdio.h>
struct B
{
public:
B() {}
// Delete the following line to resolve.
private:
// copy constructor
B(const B&) {}
};
void f(const B&)
{
}
int main()
{
try
{
B aB;
f(aB);
}
catch (B b) // C2316
{
printf_s("Caught an exception!\n");
}
}