From 5af72efc4220c2d1bd145edeefa230dcdd7fd5dc Mon Sep 17 00:00:00 2001 From: Amar Mahmutbegovic Date: Sat, 27 Apr 2024 21:02:06 +0200 Subject: [PATCH] add Chapter02 examples --- Chapter02/README.md | 10 ++++++++ Chapter02/new_deleted.cpp | 21 +++++++++++++++++ Chapter02/terminate_handler.cpp | 20 ++++++++++++++++ Chapter02/vector_dyn_mem.cpp | 30 ++++++++++++++++++++++++ Chapter02/vector_dyn_mem_reserve.cpp | 33 +++++++++++++++++++++++++++ Chapter02/vector_pmr.cpp | 34 ++++++++++++++++++++++++++++ 6 files changed, 148 insertions(+) create mode 100644 Chapter02/README.md create mode 100644 Chapter02/new_deleted.cpp create mode 100644 Chapter02/terminate_handler.cpp create mode 100644 Chapter02/vector_dyn_mem.cpp create mode 100644 Chapter02/vector_dyn_mem_reserve.cpp create mode 100644 Chapter02/vector_pmr.cpp diff --git a/Chapter02/README.md b/Chapter02/README.md new file mode 100644 index 0000000..4d6755b --- /dev/null +++ b/Chapter02/README.md @@ -0,0 +1,10 @@ +# Chapter02 + +This folder contains examples in C++ from second chapter. + +The folder contains following examples: +- vector_dyn_mem.cpp +- vector_dyn_mem_reserve.cpp +- vector_pmr.cpp +- terminate_handler.cpp +- new_deleted.cpp diff --git a/Chapter02/new_deleted.cpp b/Chapter02/new_deleted.cpp new file mode 100644 index 0000000..77a4232 --- /dev/null +++ b/Chapter02/new_deleted.cpp @@ -0,0 +1,21 @@ +#include +#include +#include + +void *operator new(std::size_t count) = delete; +void *operator new[](std::size_t count) = delete; + +void *operator new(std::size_t count, std::align_val_t al) = delete; +void *operator new[](std::size_t count, std::align_val_t al) = delete; +void *operator new(std::size_t count, const std::nothrow_t &tag) = delete; +void *operator new[](std::size_t count, const std::nothrow_t &tag) = delete; +void *operator new(std::size_t count, std::align_val_t al, const std::nothrow_t &) = delete; +void *operator new[](std::size_t count, std::align_val_t al, const std::nothrow_t &) = delete; + +int main() { + std::vector vec; + vec.push_back(123); + printf("vec[0] = %d\r\n", vec[0]); + return 0; +} + diff --git a/Chapter02/terminate_handler.cpp b/Chapter02/terminate_handler.cpp new file mode 100644 index 0000000..b2e59c9 --- /dev/null +++ b/Chapter02/terminate_handler.cpp @@ -0,0 +1,20 @@ +#include +#include +#include +#include + +int main() { + constexpr auto my_terminate_handler = []() { + printf("This is my_terminate_handler\r\n"); + std::abort(); + }; + + std::set_terminate(my_terminate_handler); + + std::array arr; + for (int i = 0; i < 5; i++) { + arr.at(i) = i; + } + + return 0; +} diff --git a/Chapter02/vector_dyn_mem.cpp b/Chapter02/vector_dyn_mem.cpp new file mode 100644 index 0000000..d36682e --- /dev/null +++ b/Chapter02/vector_dyn_mem.cpp @@ -0,0 +1,30 @@ +#include +#include +#include +#include + +void *operator new(std::size_t count) { + printf("%s, size = %ld\r\n", __PRETTY_FUNCTION__, count); + return std::malloc(count); +} + +void operator delete(void *ptr) noexcept { + printf("%s\r\n", __PRETTY_FUNCTION__); + std::free(ptr); +} + +int main() { + std::vector vec; + constexpr std::size_t n_elem = 8; + for (std::uint8_t i = 0; i < n_elem; i++) { + vec.push_back(i); + } + const auto print_array = [](uint8_t *arr, std::size_t n) { + for (std::size_t i = 0; i < n; i++) { + printf("%d ", arr[i]); + } + printf("\r\n"); + }; + print_array(vec.data(), n_elem); + return 0; +} diff --git a/Chapter02/vector_dyn_mem_reserve.cpp b/Chapter02/vector_dyn_mem_reserve.cpp new file mode 100644 index 0000000..db98497 --- /dev/null +++ b/Chapter02/vector_dyn_mem_reserve.cpp @@ -0,0 +1,33 @@ +#include +#include +#include +#include + +void *operator new(std::size_t count) { + printf("%s, size = %ld\r\n", __PRETTY_FUNCTION__, count); + return std::malloc(count); +} + +void operator delete(void *ptr) noexcept { + printf("%s\r\n", __PRETTY_FUNCTION__); + std::free(ptr); +} + +int main() { + std::vector vec; + constexpr std::size_t n_elem = 8; + + vec.reserve(n_elem); + + for (std::uint8_t i = 0; i < n_elem; i++) { + vec.push_back(i); + } + const auto print_array = [](uint8_t *arr, std::size_t n) { + for (std::size_t i = 0; i < n; i++) { + printf("%d ", arr[i]); + } + printf("\r\n"); + }; + print_array(vec.data(), n_elem); + return 0; +} diff --git a/Chapter02/vector_pmr.cpp b/Chapter02/vector_pmr.cpp new file mode 100644 index 0000000..e4114cb --- /dev/null +++ b/Chapter02/vector_pmr.cpp @@ -0,0 +1,34 @@ +#include +#include +#include +#include +#include +#include + +void *operator new(std::size_t count, std::align_val_t al) { + printf("%s, size = %ld\r\n", __PRETTY_FUNCTION__, count); + return std::malloc(count); +} + +int main() { + using namespace std; + using namespace std::pmr; + + constexpr size_t n_elem = 8; + array buffer{0}; + monotonic_buffer_resource mbr{buffer.data(), buffer.size()}; + polymorphic_allocator pa{&mbr}; + std::pmr::vector vec{pa}; + // vec.reserve(n_elem); + // + for (uint8_t i = 0; i < n_elem; i++) { + vec.push_back(i); + } + + for (uint8_t data : buffer) { + printf("%d ", data); + } + printf("\r\n"); + + return 0; +}