30/**
31 * the following code,if quick_object's construct function throw exception,then result in
32 * c/c++ Run-time system call operator delete correspond to operator new automaticlly.
33 */
34static void unit_test_new_delete_policy()
35{
36 quick_object* obj = NULL;
37
38 try {
39 obj = new quick_object; //call simple new
40 delete obj; //call simple delete
41 }catch(){
42 //call simple delete
43 }
44
45 try {
46 obj = new (std::nothrow) quick_object; //call nothrow new
47 delete obj; //call simple delete
48 }catch(){
49 // call nothrow delete
50 }
51
52 try {
53 char ptr[sizeof(quick_object)];
54 obj = new (ptr) quick_object; //call placement new
55 }catch(){
56 //call placement delete
57 }
58
59 try{
60 obj = new quick_object[10]; //call simple new[]
61 delete []obj; //call simple delete[]
62 }catch(){
63 //call simple delete[]
65
66 try {
67 obj = new (std::nothrow) quick_object[10]; //call nothrow new[]
68 delete []obj; //call simple delete[]
69 }catch(){
70 //call nothrow delete[]
71 }
72
73 try {
74 char ptr[sizeof(quick_object[10])];
75 obj = new (ptr) quick_object[10]; //call placement new[]
76 }catch () {
77 //call placement delete[]
78 }
79}
80
81/**
82 * class quick_object is inherited from class new_delete_policy_base
83 * operator new and delete,so that call placement new in template member construct of class obj_pool.
84 */
85static void unit_test_obj_pool()
86{
87 typedef object_pool_impl
88
89 try{
90 quick_object* obj = obj_pool::construct
91 obj_pool::destroy(obj);
92 }catch () {
93
94 }
95 //class normal_object's construct function do not throw exception.
96 normal_object* obj = obj_pool::construct
97 obj_pool::destroy(obj);
98}