zoukankan      html  css  js  c++  java
  • 构造函数中的异常

    C++语言: Codee#25752
    01 #include <iostream>
    02
    03 using namespace std;
    04
    05 class Trace
    06 {
    07     static int counter;
    08     int objid;
    09 public:
    10     Trace()
    11     {
    12         objid = ++counter;
    13         cout << "constructing Trace #" << objid << endl;
    14         if(objid == 3)
    15             throw 3;
    16     }
    17     ~Trace()
    18     {
    19         cout << "destructing Trace #" << objid << endl;
    20     }
    21 };
    22
    23 int Trace::counter = 0;
    24
    25 int main()
    26 {
    27     try
    28     {
    29         Trace n1;
    30         Trace array[5];
    31         Trace n2;
    32     }
    33     catch(int i)
    34     {
    35         cout << "caught " << i << endl;
    36     }
    37
    38     return 0;
    39 }
    40 /*
    41 constructing Trace #1
    42 constructing Trace #2
    43 constructing Trace #3           //throw exception before this object was completely constructed!
    44 destructing Trace #2
    45 destructing Trace #1
    46 caught 3
    47
    48 Process returned 0 (0x0)   execution time : 0.092 s
    49 Press any key to continue.
    50
    51
    52
    53 */

    C++语言: Codee#25753
    01 /*
    02     已经成功构造的cat对象不会被销毁
    03     导致内存泄漏
    04     */
    05
    06 #include <iostream>
    07 #include <cstddef>
    08 using namespace std;
    09
    10 class Cat
    11 {
    12 public:
    13     Cat()
    14     {
    15         cout << "Cat()" << endl;
    16     }
    17     ~Cat()
    18     {
    19         cout << "~Cat()" << endl;
    20     }
    21 };
    22
    23 class Dog
    24 {
    25 public:
    26     void* operator new(size_t sz)
    27     {
    28         cout << "allocating a Dog" << endl;
    29         throw 47;
    30     }
    31     void operator delete(void* p)
    32     {
    33         cout << "deallocating a Dog" << endl;
    34         ::operator delete(p);
    35     }
    36 };
    37
    38 class UseResources
    39 {
    40     Cat* bp;
    41     Dog* op;
    42 public:
    43     UseResources(int count = 1)
    44     {
    45         cout << "UseResources()" << endl;
    46         bp = new Cat[count];
    47         op = new Dog;
    48     }
    49     ~UseResources()
    50     {
    51         cout << "~UseResources()" << endl;
    52         delete []bp;
    53         delete op;
    54     }
    55 };
    56
    57 int main()
    58 {
    59     try
    60     {
    61         UseResources ur(3);
    62     }
    63     catch(int)
    64     {
    65         cout << "inside handler" << endl;
    66     }
    67
    68     return 0;
    69 }
    70 /*
    71 UseResources()
    72 Cat()
    73 Cat()
    74 Cat()
    75 allocating a Dog
    76 inside handler
    77
    78 Process returned 0 (0x0)   execution time : 0.065 s
    79 Press any key to continue.
    80
    81
    82
    83
    84
    85
    86 */
  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/invisible/p/2387228.html
Copyright © 2011-2022 走看看