1 //有用,使用静态局部变量可完成内存的共享 2 int* test() 3 { 4 static int* p = new int; 5 return p; 6 } 7 8 int main(int argc, char* argv[]) 9 { 10 int* b = test(); 11 *b = 0; 12 *b += 1; 13 int* c = test(); 14 int* d = test(); 15 int* e = test(); 16 *e += 2; 17 cout << "b:" << *b << endl; 18 cout << "c:" << *c << endl; 19 20 if (c == b && c == d && c == e) 21 { 22 delete b; 23 b = c = d = e = NULL; 24 } 25 else 26 { 27 delete b; 28 b = NULL; 29 delete c; 30 c = NULL; 31 }
上述代码实现了p所指内存的共享,也就是说,main函数里定义的变量b,c,d,e并没有开辟新的内存,而是使用第一次调用test()函数时申请的内存。例如:第一次调用test()时,假设b指向内存为0x1111,则c,d,e所指的内存都是0x1111。
同时,使用该方法来替代全局变量可以避免初始化顺序的依赖。