Указатель объявляется в каждом проходе цикла. Правильно ли это?

108
07 сентября 2021, 04:10
while(!somevalue)
{
    static int i=0;
    int *ptr= new int(i);
    if(!function(ptr))
    {
        delete ptr;
    }
    i++;
}
Answer 1

Отвечаю на вопрос, связанный с переобъявлением. В масштабе вашего кода все нормально. Не важно, инициализировать указатель перед циклом, или каждый раз его объявлять. Компилятор заботится об этом за вас, у него есть своя автоматическая оптимизация (хотя мб конкретно этот случай к ней не относится)

В итоге мы получаем абсолютно одинаковый asm код в вашем варианте и в альтернативном

void uhh(){
int i;
while (true){
    i = 2;
    std::cout << i;
}
}
asm:
uhh():
  push rbp
  mov rbp, rsp
  sub rsp, 16
.L4:
  mov DWORD PTR [rbp-4], 2
  mov eax, DWORD PTR [rbp-4]
  mov esi, eax
  mov edi, OFFSET FLAT:_ZSt4cout
  call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
  jmp .L4
void uh(){
while (true){
    int i = 2;
    std::cout << i;
}
}
asm:
uh():
  push rbp
  mov rbp, rsp
  sub rsp, 16
.L2:
  mov DWORD PTR [rbp-4], 2
  mov eax, DWORD PTR [rbp-4]
  mov esi, eax
  mov edi, OFFSET FLAT:_ZSt4cout
  call std::basic_ostream<char, std::char_traits<char> >::operator<<(int)
  jmp .L2

Переводил код на плюсах в asm код с помощью этого сервиса

READ ALSO
Вставить данные в поле

Вставить данные в поле

Есть html типа

125
Печать DataTable

Печать DataTable

Надо распечатать DataTable(DataGrid) в горизонтальной(альбомной) ориентацииПробовал печатать DataGrid, не влазит(много колонок)

144
Как сравнить масивы по значению

Как сравнить масивы по значению

Есть Dictionary < int[], string > example_dictionary , при записи в него новой переменной мне надо проверить, существует ли уже данный ключ, но если делать так:

147
Почему Visit в ExpressionVisitor так странно реализован?

Почему Visit в ExpressionVisitor так странно реализован?

В общем, если посмотреть код, то видно, что там здоровенный switch, который выбирает нужную реализацию

99