Opened 3 years ago

Closed 3 years ago

#369 closed ожидается проверка (задача сдана)

WW #7

Reported by: predelina.anastasiya Owned by: Святослав Власов
Component: WW Matrix Version: 2.0
Keywords: Cc:

Description


Change History (3)

comment:1 Changed 3 years ago by Святослав Власов

Type: ожидается проверкаожидаются исправления
  1. Валгринд ругается на ошибки почти везде (течет память):
    ==467127== Memcheck, a memory error detector
    ==467127== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
    ==467127== Using Valgrind-3.16.1 and LibVEX; rerun with -h for copyright info
    ==467127== Command: ../../../homeworks/predelina.anastasiya/lab_07/main
    ==467127== Parent PID: 467126
    ==467127==
    ==467127==
    ==467127== HEAP SUMMARY:
    ==467127==     in use at exit: 24 bytes in 1 blocks
    ==467127==   total heap usage: 9 allocs, 8 frees, 81,088 bytes allocated
    ==467127==
    ==467127== 24 bytes in 1 blocks are definitely lost in loss record 1 of 1
    ==467127==    at 0x483B50F: operator new[](unsigned long) (vg_replace_malloc.c:431)
    ==467127==    by 0x10CDBF: Matrix::Matrix(unsigned long, unsigned long) (in /home/svloyso/study/homeworks/predelina.anastasiya/lab_07/main)
    ==467127==    by 0x10A496: main (in /home/svloyso/study/homeworks/predelina.anastasiya/lab_07/main)
    ==467127==
    ==467127== LEAK SUMMARY:
    ==467127==    definitely lost: 24 bytes in 1 blocks
    ==467127==    indirectly lost: 0 bytes in 0 blocks
    ==467127==      possibly lost: 0 bytes in 0 blocks
    ==467127==    still reachable: 0 bytes in 0 blocks
    ==467127==         suppressed: 0 bytes in 0 blocks
    ==467127==
    ==467127== For lists of detected and suppressed errors, rerun with: -s
    ==467127== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
    [616][svloyso:check]$
    
    
  2. Тест на операторы сравнения падает
  3. Хочется выделять память под матрицу за меньшее количество вызовов new, вы это умеете делать еще с прошлого семестра
  4. Хочется избавиться от копи-пасты в конструкторах и операторе присваивания. Используй swap trick
  5. В операторе *= ты не используешь swap trick. std::swap внутри себя просто делает обмен значений двух переменных примерно так:
    void std::swap(Matrix& a, Matrix& b) {
      Matrix c = a;
      a = b;
      b = c;
    }
    

То есть у тебя там создастся временный объект и два раза вызовется оператор присваивания, который аллоцирует память и скопирует данные. Всё это избыточно и не нужно. Чтобы этого избежать нужно написать свой swap, который будет просто обменивать значения полей у двух объектов друг с другом.

comment:2 Changed 3 years ago by predelina.anastasiya

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

Поправила

comment:3 Changed 3 years ago by Святослав Власов

Resolution: задача сдана
Status: assignedclosed

10/10

Note: See TracTickets for help on using tickets.