﻿# V738\. Temporary anonymous object is used\.

Анализатор обнаружил, что используется временный анонимный объект, получившийся в результате работы постфиксного оператора \+\+ или \-\-\. Иногда это имеет смысл\. Но когда речь заходит о изменении этого временного объекта или взятии его адреса, то это ошибка\.

Рассмотрим первый пример:

```cpp
vector<float>::iterator it = foo();
it++ = x;
```

Создаётся временная копия итератора\. Итератор инкрементируется\. После чего к временному объекту применяется оператор присваивания\. Этот код не имеет смысла\. Автор кода хотел явно сделать что\-то другое\. Например, он хотел в начале выполнить присваивание, а уже затем воспользоваться инкрементом\.

В этом случае корректный код должен выглядеть так:

```cpp
it = x;
it++;
```

Однако постфиксная операция для итераторов [не эффективна](https://pvs-studio.ru/ru/blog/posts/cpp/0093/)\. И будет лучше написать так:

```cpp
it = x;
++it;
```

Есть ещё один вариант:

```cpp
it = x + 1;
```

Рассмотрим второй пример:

```cpp
const vector<int>::iterator *itp = &it++;
```

Указатель 'itp' использовать нельзя\. Он указывает на временный неименованный объект, который уже разрушен\. Корректный вариант кода:

```cpp
++it;
const vector<int>::iterator *itp = &it;
```