1+ // clang-format off
12/* ****************************************************************/ /* *
23 * \file new_handler.cpp
34 * \brief settings custom lambda to handle failing new operator calls;
910 * \author Xuhua Huang
1011 * \date November 2022
1112 *********************************************************************/
13+ // clang-format on
1214
1315#include < iostream>
1416#include < string>
1517
1618class Widget {
1719public:
18- static std::new_handler set_new_handler (std::new_handler p) throw();
19- static void * operator new (std::size_t size) throw (std::bad_alloc);
20+ static std::new_handler set_new_handler (std::new_handler p) throw();
21+ static void * operator new (std::size_t size) throw (std::bad_alloc);
2022
2123private:
22- static std::new_handler current_handler;
24+ static std::new_handler current_handler;
2325};
2426
2527// initialize static member of class Widget
@@ -32,22 +34,22 @@ std::new_handler Widget::current_handler = 0;
3234 * \return
3335 */
3436std::new_handler Widget::set_new_handler (std::new_handler p) throw() {
35- std::new_handler old_handler = current_handler;
36- current_handler = p;
37- return old_handler;
37+ std::new_handler old_handler = current_handler;
38+ current_handler = p;
39+ return old_handler;
3840}
3941
4042class NewHandlerHolder {
4143public:
42- explicit NewHandlerHolder (std::new_handler nh)
43- : handler(nh) {}
44- virtual ~NewHandlerHolder () { std::set_new_handler (handler); }
44+ explicit NewHandlerHolder (std::new_handler nh)
45+ : handler(nh) {}
46+ virtual ~NewHandlerHolder () { std::set_new_handler (handler); }
4547
4648private:
47- std::new_handler handler;
48- // prevent copying
49- NewHandlerHolder (const NewHandlerHolder&) = delete ;
50- NewHandlerHolder& operator =(const NewHandlerHolder&) = delete ;
49+ std::new_handler handler;
50+ // prevent copying
51+ NewHandlerHolder (const NewHandlerHolder&) = delete ;
52+ NewHandlerHolder& operator =(const NewHandlerHolder&) = delete ;
5153};
5254
5355/* *
@@ -57,8 +59,8 @@ class NewHandlerHolder {
5759 * \return
5860 */
5961void * Widget::operator new (std::size_t size) throw (std::bad_alloc) {
60- NewHandlerHolder h (std::set_new_handler (current_handler));
61- return ::operator new (size);
62+ NewHandlerHolder h (std::set_new_handler (current_handler));
63+ return ::operator new (size);
6264} // once the NewHandlerHolder h goes out of scope of this function
6365// the global new handler is restored.
6466
@@ -68,11 +70,11 @@ void* Widget::operator new(std::size_t size) throw(std::bad_alloc) {
6870template <typename T>
6971class NewHandlerSupport {
7072public:
71- static std::new_handler set_new_handler (std::new_handler p) throw();
72- static void * operator new (std::size_t size) throw (std::bad_alloc);
73+ static std::new_handler set_new_handler (std::new_handler p) throw();
74+ static void * operator new (std::size_t size) throw (std::bad_alloc);
7375
7476private:
75- static std::new_handler current_handler;
77+ static std::new_handler current_handler;
7678};
7779
7880// initialized static private member
@@ -82,16 +84,16 @@ std::new_handler NewHandlerSupport<T>::current_handler = 0;
8284// provide set_new_handler function definition
8385template <typename T>
8486std::new_handler NewHandlerSupport<T>::set_new_handler(std::new_handler p) throw () {
85- std::new_handler old_handler = current_handler;
86- current_handler = p;
87- return old_handler;
87+ std::new_handler old_handler = current_handler;
88+ current_handler = p;
89+ return old_handler;
8890}
8991
9092// provide new operator definition
9193template <typename T>
9294void * NewHandlerSupport<T>::operator new (std::size_t size) throw (std::bad_alloc) {
93- NewHandlerHolder h (std::set_new_handler (current_handler));
94- return ::operator new (size);
95+ NewHandlerHolder h (std::set_new_handler (current_handler));
96+ return ::operator new (size);
9597}
9698
9799namespace demo {
@@ -101,6 +103,6 @@ class Widget : public NewHandlerSupport<Widget> {};
101103} // namespace demo
102104
103105int main (void ) {
104- std::cout << " Hello, world!" << " \n " ;
105- return EXIT_SUCCESS;
106+ std::cout << " Hello, world!" << " \n " ;
107+ return EXIT_SUCCESS;
106108}
0 commit comments