C++ provides several mechanisms for dynamically allocating memory at runtime. Function overloading allows functions to have the same name but different signatures defined by their parameters. Default arguments allow functions to have default values specified if arguments are not provided during a call. Dynamic memory allocation provides flexibility for programs to allocate variable amounts of memory as needed at runtime, such as for linked lists and trees. The new operator requests memory allocation from the heap and returns a pointer to the initialized memory. The delete operator is used to deallocate dynamically allocated memory as it is the programmer's responsibility to free up memory. Enumerated types define a data type where every possible value is a symbolic constant.