shu*_*uwo 4 c++ memory free new-operator
关于C++中的内存处理,我有几个问题.
有什么不同Mystruct *s = new Mystruct
和Mystruct s
?记忆中会发生什么?
看看这段代码:
struct MyStruct{
int i;
float f;
};
MyStruct *create(){
MyStruct tmp;
tmp.i = 1337;
tmp.j = .5f;
return &tmp;
}
int main(){
MyStruct *s = create();
cout << s->i;
return 0;
}
Run Code Online (Sandbox Code Playgroud)什么时候免费MyStruct tmp
?为什么最后没有MyStruct tmp
自动免费create()
?
谢谢!
当您使用new
关键字获取指针时,您的结构将在堆上分配,以确保它将在应用程序的生命周期内持续存在(或直到它被删除).
如果不这样做,结构将在堆栈上分配,并在分配的范围终止时销毁.
我对你的例子的理解(如果我错了,请不要犹豫,告诉我,任何人):
tmp
确实会在函数末尾"释放"(不是堆栈变量的最佳单词选择),因为它是在堆栈上分配的,并且堆栈帧已经丢失.你返回的指针/内存地址不再具有任何意义,如果代码有效,你基本上只是幸运(没有任何东西覆盖旧数据).
归档时间: |
|
查看次数: |
346 次 |
最近记录: |