我有以下代码
enum class LoggerType
{
ASCII,
BINARY_1,
TEXT,
BINARY_2,
NUM_OF_TYPE
};
Logger* Logger::GetInstance(
LoggerType type)
{
static Logger* pLogger[4] =
{
new Logger(LoggerType::ASCII),
new Logger(LoggerType::BINARY_1),
new Logger(LoggerType::TEXT),
new Logger(LoggerType::BINARY_2)
};
return pLogger[static_cast<UINT8>(type)];
}
Klockwork 告诉我
Array 'pLogger' of size 2 may use index value(s) 2
这里真的有问题吗?如果是这样,请知道如何处理这个问题。我应该为“static_cast(type)”添加一些保护吗?非常感谢
** 以下是我猜的问题** 因为我们有 5 个 LoggerType,KW 可能认为即使我们没有越界访问也是可能的。所以我们必须在这里添加一些保护,
Logger* pReturnLogger = NULL;
if (static_cast<UINT8>(type) < static_cast<UINT8>(LoggerType::NUM_OF_TYPE))
{
pReturnLogger = pLogger[static_cast<UINT8>(type)];
}
return pReturnLogger;