使用新的外部函数范围声明和初始化变量

Tho*_*ews 3 c++ memory-management global-variables visual-studio-2010 new-operator

我的一位同事使用以下方法声明并初始化了一个全局变量new:

#define MAX_SIZE_TABLES (1024 * 1024)

unsigned char * ImageBuf = new unsigned char[MAX_SIZE_TABLES];
Run Code Online (Sandbox Code Playgroud)

使用Microsoft Visual Studio 2010 Premium编译和构建时没有错误.

我的问题:
标准或未定义的行为是否合法?

如果没有函数调用,何时删除内存delete

编辑1:在"为变量声明"之后添加"初始化".

Nik*_* C. 7

new不声明变量.它分配内存.声明部分是这样的:

unsigned char * ImageBuf
Run Code Online (Sandbox Code Playgroud)

的:

= new unsigned char[MAX_SIZE_TABLES];
Run Code Online (Sandbox Code Playgroud)

部分是初始化,而不是声明.

在全局范围内就地初始化变量是合法的,包括使用new或函数调用.程序不会自动释放内存(手动分配的内存永远不会自动释放;分配发生的位置无关紧要.)当进程退出时,操作系统将释放内存(以及所有常规清理) ,如关闭文件等.)但当然这是特定于平台的.从程序的角度来看,内存在其生命周期中永远不会被释放.