在C++中,以堆方式或栈方式创建的对象往往有着不一样的生命周期。通常情况下,以栈方式创建的对象会被对应作用域的结束而摧毁,而堆方式创建的对象则需要由程序员手动回收或在程序结束后由操作系统进行回收。
int* getArrary() {
int a[50]; // 以栈方式创建对象
return a;
}
int* getArrary1() {
int* a = new int[50]; // 以堆方式创建对象
return a;
}
void getArrary2(int* Array) {
// fill the array 创建填充已有内存指针数组的方法
for (int i = 0; i < 50; i++) {
Array[i] = 0;
}
}
int main() {
int* p = getArrary(); // warning C4172: 返回局部变量或临时变量的地址: a
int* q = getArrary1(); // Success
delete[] q;
int t[50];
getArrary2(t);; // Success
}
通常情况下,我们会在栈中创建对象,这样程序员就不必时刻担心对象的回收问题。因此只有在必要的时候程序员才应该考虑使用堆方式创建对象。