class X {
public:
X(int i) : num(i){}
int num;
};
void f(int i){
static X* px1 = new X(i);
X* px2 = new X(i);
cout<<px1->num;
cout<<px2->num<<' ';
};
void main(){
for (int i=0;i<5;i++)
f(i);
}
Run Code Online (Sandbox Code Playgroud)
这段代码会输出00 01 02 03 04,但我不太明白为什么静态指针px1不能使用它来改变它的值operator new.
此外,此代码有内存泄漏问题.我可以delete用px1吗?是否会delete在两个指针上使用解决内存泄漏问题?
sha*_*oth 12
这是因为当控件首次通过初始化代码时,静态本地只被初始化一次.因此,虽然您多次调用该函数以下行:
static X* px1 = new X(i);
Run Code Online (Sandbox Code Playgroud)
只会在第一次调用中执行(i为零),变量将在函数调用之间保持其值.
是的,您可以,delete px1但最好将其设置为null,以避免双重自由和未定义的行为.你也有泄漏与指向的对象px2- 你也必须照顾这些对象.
| 归档时间: |
|
| 查看次数: |
3482 次 |
| 最近记录: |