#include "memory-classes.hpp" #include lifo::lifo(std::size_t max_size_) : max_size(max_size_) { m_storage = new int[max_size]; } lifo::~lifo() { if (m_storage != nullptr) delete m_storage; } void lifo::push(int v) { if (m_top >= max_size) return; m_storage[m_top++] = v; } int lifo::pop() { if (m_top <= 0) return 0; return m_storage[--m_top]; } int main(int argc, char *argv[]) { // the lifo allocates a memory buffer lifo stack(5); stack.push(1); stack.push(2); stack.push(3); stack.push(4); stack.push(5); std::cout << stack.pop() << std::endl; std::cout << stack.pop() << std::endl; std::cout << stack.pop() << std::endl; std::cout << stack.pop() << std::endl; std::cout << stack.pop() << std::endl; return 0; // here, when the scope ends the stack object is destroyed // as it goes *out of scope*, and so the destructor is called // which frees the memory }