S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

delete operator

Posted on 2009-05-10 17:27 S.l.e!ep.¢% 阅读(1750) 评论(2)  编辑 收藏 引用 所属分类: C++
#include  < stdio.h >

inline 
void *   operator   new  (size_t size,  const   char *  fun) 

    
return   :: operator   new (size); 
}
 

inline 
void   operator  delete( void * ptr,  const   char *  fun) 

    
if (ptr  ==  NULL)
        
return ;
    ::
operator  delete(ptr);
}


#define  __FUNCTION__ ""
#define  NEW new (__FUNCTION__)
#define  DELETE delete (__FUNCTION__)

int  main( int  argc,  char *  argv[])
{
    
int *  test  =  NEW  int ();

    DELETE test; 
//  warning C4156: deletion of an array expression without using the array form of 'delete'; array form substituted
//  warning C4154: deletion of an array expression; conversion to pointer supplied
//  error C2541: delete : cannot delete objects that are not pointers
//  error C2146: syntax error : missing ';' before identifier 'test'
 
    
return   0 ;
}


经过 google 发现 delete 的语法只支持一个参数,晕。。而 new 就可以多个参数

new-expression:
::opt new new-placementopt new-type-id new-initializeropt
::opt new new-placementopt ( type-id ) new-initializeropt
new-placement:
( expression-list )
......

delete-expression:
::opt delete cast-expression
::opt delete [ ] cast-expression

最后没办法,只好这样写了
#defind DELETE(x) ::operator delete((x), __FUNCTION__);

Feedback

# re: delete operator  回复  更多评论   

2009-05-10 21:42 by OwnWaterloo
这样写是不正确的。

new操作符的含义是:
1. 调用相应的operator new分配内存
2. 在该内存上构造对象

delete 操作符执行相反的工作。
1. 调用对象的析构函数
2. 调用operator delete释放内存。

如果只调用operator delete, 对象析构函数将得不到调用。

# re: delete operator  回复  更多评论   

2009-05-10 21:46 by OwnWaterloo
楼主可以参考这篇文章, 为什么delete不能像new那样使用。
http://cpp.ga-la.com/html/24/26/0707/288.htm


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理