The analyzer has detected an exception thrown by pointer. A more common practice is to throw exceptions by value and catch them by reference. When thrown by pointer, an exception may never be caught as it is supposed to be caught by reference. In addition, the catching part will have to call the 'delete' operator to destroy the object created to avoid a memory leak.
Consider the following example:
throw new std::runtime_error("error");
Fixed code:
throw std::runtime_error("error");
Throwing an exception by pointer is not a mistake in itself, of course. Such exceptions can be properly caught and handled. But in practice, this is inconvenient and leads to errors. The arguments against throwing exceptions by pointer are as follows:
So, throwing exceptions by pointer can be considered an anti-pattern, which should be rewritten into correct code.
References:
This diagnostic is classified as:
You can look at examples of errors detected by the V1022 diagnostic. |