C++宏确保释放已用内存?

Ril*_*ley 6 c++ macros memory-leaks memory-management

所以我有点像n00b并且正在阅读关于new,delete和指针,我确信在我的生命中我会忘记太多的删除.所以我想知道像下面的宏是否会比它的价值更麻烦.

#define withObject(ptr, value, BODY)                       \
{                                                           \
     ptr = value;                                           \
     BODY                                                   \
     delete ptr;                                            \ 
     ptr=NULL                                               \
}
Run Code Online (Sandbox Code Playgroud)

这个宏会导致一些问题或以意想不到的方式表现吗?

编辑:oops我离开了d on freed.谢谢大家的答案.

小智 14

不,不要这样做.它不会阻止内存泄漏或杂散指针.相反,请阅读智能指针.当前标准提供了auto_ptr的形式,但是有更多(和更好的)可用,具体取决于您的C++平台.

另外,我怀疑你可能过度使用new和delete - 它们应该在代码中很少使用.您应该更喜欢使用值.所以不是这样的:

string * s = new string ( "foobar" );
....
delete s;
Run Code Online (Sandbox Code Playgroud)

你应该简单地写:

string s( "foobar" );
Run Code Online (Sandbox Code Playgroud)

并让编译器为您管理字符串的生命周期.

  • @unapersson:来自[FAQ](http://stackoverflow.com/faq):"如果您对其他可信用户编辑的问题和答案的想法不满意,这可能不适合您. " (5认同)
  • @Martin对不起,我不相信允许编辑答案,除了删除危险错误,拼写错误,当然还有CW的情况. (2认同)
  • @Brian我很满意,正如我的评论所暗示的那样,但如果它改变了我的答案的意义或推力,那就不行了. (2认同)

Dan*_*olt 8

不需要在这里重新发明轮子,你正在寻找智能指针.

非常有用的Boost库具有智能指针功能.