根据《Effective C++ 中文版(第三版)》所讲,语句
“共调用了两个函数:一个是用以分配内存的operator new,一个是Widget的default构造函数。”对于前者,我们可以通过重载operator new符号,进行干预;对于后者,我们只能编写构造函数,但是无法阻止或增加执行次数,因为那是编译器自己增加的代码,用于在operator new返回的地址处开始,使用Widget的default构造函数初始化内存。
遂比着书上的例子,写了下面的例子:
- #include
- #include
- #include
- class C{
- public:
- C(){
- cout<<"Constructing C"<
- throw 0;
- }
- void* operator new(size_t size)throw(){
- cout<<"operator new"<
- return malloc(size);
-
-
- }
- void operator delete(void *)throw(){
- cout<<"operator delete"<
- }
- };
- int main(){
- try{
-
-
-
-
-
-
-
-
-
- C *pc=new C();
- }catch(int){
- cout<<"Catch it!"<
- }
-
-
-
-
-
-
- return 0;
- }
输出结果为:
- operator new
- Constructing C
- operator delete
- Catch it!
- 本文与站长中心同步首发:
阅读(640) | 评论(0) | 转发(0) |