Почему нет предупреждения gcc / g ++ для неиспользуемых временных файлов ?

Рассмотрим следующий код:

void ListenerImpl::attach(boost::shared_ptr subscriber)
{
    boost::unique_lock(mtx);
    subscribers.push_back(subscriber);
}

void ListenerImpl::notify(MsgPtr msg)
{
    boost::unique_lock(mtx);

    //notify all subscribers
    BOOST_FOREACH(boost::shared_ptr subscriber, subscribers){
        subscriber->update(msg);
    }

}

(Это реализация шаблона наблюдателя, описанного в GoF.) Вмешательство пользователя здесь состояло в том, чтобы защитить attach () и notify () от одновременного запуска, отсюда и boost :: unique_lock. Целью было защитить контейнер подписчиков .

Но действительно чрезвычайно трудно заметить, что замки на самом деле являются временными (посмотрите внимательнее, им не присвоено имен). Таким образом, блокировка мьютекса будет снята немедленно, когда временное будет уничтожено, то есть код не является потокобезопасным. В подобных ситуациях я ожидал предупреждения компилятора. Что-то вроде «Неиспользованный временный».

Хуже того, cppcheck тоже не распознает эту ошибку. (cppcheck: инструмент анализа кода c / c ++ http://sourceforge.net/apps/mediawiki/cppcheck/index.php?title=Main_Page )

Gcc выдает предупреждения о неиспользуемых переменных. Временная переменная здесь - это неиспользуемая переменная и определенно результат невнимательности программиста. Итак, почему в таких случаях нет предупреждений? Может быть, обнаруживать такие ситуации слишком сложно?

11
задан luke 30 June 2011 в 13:15
поделиться