diff --git a/modules/05_pointers_and_references/include/dynamic_memory.hpp b/modules/05_pointers_and_references/include/dynamic_memory.hpp index 6e7fced..ed861b8 100644 --- a/modules/05_pointers_and_references/include/dynamic_memory.hpp +++ b/modules/05_pointers_and_references/include/dynamic_memory.hpp @@ -5,7 +5,7 @@ namespace pointers { [[nodiscard]] auto allocate_and_fill(std::size_t count, int value) -> int*; -void deallocate(int* ptr); +void deallocate(const int* ptr); [[nodiscard]] auto clone_array(const int* source, std::size_t count) -> int*; } // namespace pointers diff --git a/modules/05_pointers_and_references/src/dynamic_memory.cpp b/modules/05_pointers_and_references/src/dynamic_memory.cpp index ed1e3bb..c3a5cf5 100644 --- a/modules/05_pointers_and_references/src/dynamic_memory.cpp +++ b/modules/05_pointers_and_references/src/dynamic_memory.cpp @@ -1,9 +1,23 @@ #include "dynamic_memory.hpp" +#include + namespace pointers { -auto allocate_and_fill(std::size_t count, int value) -> int* { (void)count; (void)value; return nullptr; } -void deallocate(int* ptr) { delete[] ptr; } -auto clone_array(const int* source, std::size_t count) -> int* { (void)source; (void)count; return nullptr; } +auto allocate_and_fill(const std::size_t count, const int value) -> int* { + const auto na = new int[count]; + std::fill_n(na, count, value); + return na; +} + +void deallocate(const int* ptr) { + delete[] ptr; +} + +auto clone_array(const int* source, const std::size_t count) -> int* { + const auto na = new int[count]; + std::copy_n(source, count, na); + return na; +} } // namespace pointers