Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
'class_type' : ne peut pas être intercepté, car le destructeur et/ou le constructeur de copie sont inaccessibles ou supprimés
Notes
Une exception a été interceptée par valeur ou par référence, mais le constructeur de copie, l’opérateur d’affectation ou les deux étaient inaccessibles.
Les modifications de conformité dans Visual Studio 2015 ont fait que cette erreur s’applique aux instructions de capture incorrectes des exceptions MFC dérivées de CException. Étant donné que CException possède un constructeur de copie privée hérité, la classe et ses dérivés ne peuvent pas être copiés et ne peuvent pas être passés par valeur, ce qui signifie également qu’ils ne peuvent pas être interceptés par valeur. Les instructions catch qui ont intercepté les exceptions MFC par valeur ont précédemment conduit à des exceptions non interceptées au moment de l’exécution. À présent, le compilateur identifie correctement cette situation et signale l’erreur C2316. Pour résoudre ce problème, nous vous recommandons d’utiliser les macros TRY/CATCH MFC plutôt que d’écrire vos propres gestionnaires d’exceptions. Si cela n’est pas approprié pour votre code, interceptez les exceptions MFC par référence à la place.
Exemple
L’exemple suivant génère l’erreur C2316 et montre un moyen de le corriger :
// 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");
}
}