Skip to content

Commit ad89614

Browse files
author
XuhuaHuang
committed
Add design principle examples
1 parent 2ee70e3 commit ad89614

File tree

1 file changed

+27
-25
lines changed

1 file changed

+27
-25
lines changed

NewHandler/new_handler.cpp

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
// clang-format off
12
/*****************************************************************//**
23
* \file new_handler.cpp
34
* \brief settings custom lambda to handle failing new operator calls;
@@ -9,17 +10,18 @@
910
* \author Xuhua Huang
1011
* \date November 2022
1112
*********************************************************************/
13+
// clang-format on
1214

1315
#include <iostream>
1416
#include <string>
1517

1618
class Widget {
1719
public:
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

2123
private:
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
*/
3436
std::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

4042
class NewHandlerHolder {
4143
public:
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

4648
private:
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
*/
5961
void* 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) {
6870
template <typename T>
6971
class NewHandlerSupport {
7072
public:
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

7476
private:
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
8385
template <typename T>
8486
std::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
9193
template <typename T>
9294
void* 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

9799
namespace demo {
@@ -101,6 +103,6 @@ class Widget : public NewHandlerSupport<Widget> {};
101103
} // namespace demo
102104

103105
int 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

Comments
 (0)