Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
«class_type» : não pode ser apanhado, uma vez que o destruidor e/ou o construtor da cópia estão inacessíveis ou são eliminados
Observações
Uma exceção foi capturada por valor ou por referência, mas o construtor copy, o operador de atribuição ou ambos estavam inacessíveis.
As alterações de conformidade no Visual Studio 2015 fizeram com que esse erro se aplicasse a instruções de captura incorretas de exceções MFC derivadas de CException. Como CException tem um construtor de cópia privada herdado, a classe e seus derivados não são copiáveis e não podem ser passados pelo valor, o que também significa que eles não podem ser capturados pelo valor. Instruções catch que capturaram exceções MFC por valor anteriormente levaram a exceções não capturadas em tempo de execução. Agora o compilador identifica corretamente essa situação e relata o erro C2316. Para corrigir esse problema, recomendamos que você use as macros MFC TRY/CATCH em vez de escrever seus próprios manipuladores de exceção. Se isso não for apropriado para o seu código, pegue exceções MFC por referência.
Example
O exemplo a seguir gera C2316 e mostra uma maneira de corrigi-lo:
// 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");
}
}