Введение
Если вы когда-нибудь собирали проекты на C++, то практически наверняка получали ошибку от линковщика формата:
/usr/bin/ld: /tmp/ccYa2eaO.o: в функции «foo()»:
foo.cpp:(.text+0x0): повторное определение «foo()»; /tmp/ccKEs5I7.o:main.cpp:(.text+0x0): здесь первое определение
collect2: error: ld returned 1 exit status
Опытным C++ разработчикам эта проблема известна как ODR (One Definition Rule). Но корень этой ошибки выходит далеко за рамки «используй inline в .hpp» и «не определяй ничего в .hpp».


![Почему в С++ массивы нужно удалять через delete[] - 1 delete_or_delete_for_array_ru/image1.png](https://www.pvsm.ru/images/2022/07/28/pochemu-v-s-massivy-nujno-udalyat-cherez-delete.png)
