Станд.:: auto_ptr не должен использоваться.
Станд.:: auto_ptr не должен использоваться.
std::auto_ptr тип шаблона класса, который предшествует введению семантики перемещения на C++ 11 стандартов языка. Когда вы копируете источник std::auto_ptr объект в целевой объект, исходный объект изменяется. Компилятор передает владение ресурсов в исходном объекте к целевому объекту и устанавливает исходный объект на нулевого указателя. Из-за этого необычного синтаксиса копии с помощью исходного объекта после того, как операция копии может привести к неожиданному поведению. Рассмотрите этот фрагмент кода где использование std::auto_ptr результаты в отказе сегментации.
void func(auto_ptr<int> p) {
cout<<*p;
//...
}
int main()
{
std::auto_ptr<int> s = new int(1);
//..
func(s); // This call makes s a null-pointer
//...
func(s); // exception, because s is null
return 1;
}Первый вызов func() копирует источник std::auto_ptr объекты к аргументу p, владение передач указателя на p, и наборы s к нулевому указателю. Когда func() называется снова, компилятор пытается получить доступ к нулевому указателю s, порождение отказа сегментации.
std::auto_ptr текстовые объекты также несовместимы с любым типовым кодом, который ожидает, что операция копии не будет делать недействительным исходный объект, такой как стандартная библиотека шаблонов (STL). Избегайте использования std::auto_ptr. Это удержано от использования на C++ 11 и удалено из C++ 17. C++ 11 стандартов языка вводит std::unique_ptr как более безопасная замена для std::auto_ptr. Используйте std::unique_ptr вместо std::auto_ptr.
Polyspace® отмечает все экземпляры std::auto_ptr в вашем коде, кроме тех в C разрабатывают массивы.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
| Группа: вспомогательная библиотека Языка |
| Категория: необходимый, автоматизированный |