0

次のコードがあります

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)];
}

そしてクロックワークは教えてくれる

Array 'pLogger' of size 2 may use index value(s) 2

ここに本当の問題がありますか?もしそうなら、この問題に対処する方法を教えてください。「static_cast(type)」に何らかの保護を追加する必要がありますか? どうもありがとう

** 以下は、私が推測する問題です ** LoggerType が 5 つあるため、KW は、私たちがそうでなくても out ofbound にアクセスできると考えるかもしれません。したがって、ここに保護を追加する必要があります。

Logger* pReturnLogger = NULL;

if (static_cast<UINT8>(type) < static_cast<UINT8>(LoggerType::NUM_OF_TYPE))
{
    pReturnLogger = pLogger[static_cast<UINT8>(type)];
}
return pReturnLogger;
4

0 に答える 0