Утверждение не выполнено / Исключения для STL - PullRequest
1 голос
/ 17 июня 2011

Предположим, у меня есть пустой список L. В настоящее время, если я запускаю L.front (), он с радостью выполнит возврат значения мусора. Есть ли какая-либо опция, которую я могу включить, чтобы выполнение этой команды приводило к исключению или к ошибке подтверждения?

Спасибо

Ответы [ 4 ]

2 голосов
/ 17 июня 2011

Используйте empty(), чтобы проверить, пуст ли список. size() здесь не очень хорошо, потому что он может иметь линейное время выполнения. Подробнее см. В Effective STL . empty() имеет постоянное время выполнения, и это стандартный способ.

1 голос
/ 17 июня 2011

Если вы используете Visual C ++ 2010 (и, возможно, более ранние версии), то вы можете включить безопасную отладку SCL и итератор, используя эти два макроса:

#define _SECURE_SCL 1
#define _HAS_ITERATOR_DEBUGGING 1

В других стандартных библиотеках это тоже может быть.

Редактировать: Как и было предложено, в VC2010 есть один макрос, то есть _ITERATOR_DEBUG_LEVEL, который имеет 3 уровня, определенных следующим образом:

#if _HAS_ITERATOR_DEBUGGING
    #define _ITERATOR_DEBUG_LEVEL 2
#elif _SECURE_SCL
    #define _ITERATOR_DEBUG_LEVEL 1
#else
    #define _ITERATOR_DEBUG_LEVEL 0
#endif
0 голосов
/ 17 июня 2011

Некоторые стандартные библиотеки предлагают такую ​​возможность.Вам необходимо обратиться к документации и / или коду для конкретной реализации / компилятора, чтобы определить его характеристики и способы его включения.

В качестве альтернативы вы можете вместо этого использовать средство проверки памяти, такое как valgrind или Purify.на уровне библиотеки.

...