Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
"class_type": nie można przechwycić, ponieważ destruktor i/lub konstruktor kopiowania są niedostępne lub usunięte
Uwagi
Wyjątek został przechwycony przez wartość lub odwołanie, ale konstruktor kopiowania, operator przypisania lub oba były niedostępne.
Zmiany zgodności w programie Visual Studio 2015 sprawiły, że ten błąd był stosowany do nieprawidłowych instrukcji catch wyjątków MFC pochodzących z CExceptionelementu . Ponieważ CException ma dziedziczony konstruktor kopii prywatnej, klasa i jej pochodne nie można kopiować i nie mogą być przekazywane według wartości, co oznacza również, że nie można ich przechwycić według wartości. Instrukcje catch, które przechwyciły wyjątki MFC według wartości wcześniej doprowadziły do nieuchwyconych wyjątków w czasie wykonywania. Teraz kompilator poprawnie identyfikuje tę sytuację i zgłasza błąd C2316. Aby rozwiązać ten problem, zalecamy użycie makr TRY/CATCH MFC zamiast pisania własnych procedur obsługi wyjątków. Jeśli nie jest to odpowiednie dla kodu, zamiast tego przechwyć wyjątki MFC według odwołania.
Przykład
Poniższy przykład generuje kod C2316 i pokazuje sposób jego naprawy:
// 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");
}
}