sha*_*oth 0 c++ gcc memory-management
我在codepad.org和ideone.com上尝试了以下代码:
char* ptr = new char;
free( ptr );
Run Code Online (Sandbox Code Playgroud)
是的,我知道这是未定义的行为,但我想编译并运行它以查看会发生什么.
Visual C++ 10编译它,但在上述网站上使用的gcc说
错误:在'('标记之前)的预期构造函数,析构函数或类型转换
为什么这个代码不能用gcc编译,我怎么能让它编译?
这是您的代码(来自您的链接):
#include <stdlib.h>
char* ptr = new char;
free( ptr );
Run Code Online (Sandbox Code Playgroud)
free() 是一个函数,在命名空间范围内,您不能编写函数调用语句.
在命名空间范围内,您只能声明和定义变量和类型.但是,您可以在变量的初始化中调用函数.所以这没关系:
char* ptr = new char; //Note new is a function call!
Run Code Online (Sandbox Code Playgroud)
但这不可行:
free(ptr);
Run Code Online (Sandbox Code Playgroud)
如果你想这样做,那么这是一招:
const int ignore = (free(ptr), 0); //at namespace scope!
Run Code Online (Sandbox Code Playgroud)
这没关系.演示:http://ideone.com/8yymM