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);
}
这段代码会输出00 01 02 03 04
,但是我不太明白为什么静态指针px1
不能用operator new改变它的值
。
此外,这段代码存在内存泄漏问题。我可以将 delete
与 px1
一起使用吗?在两个指针上使用delete
是否可以解决内存泄漏问题?
最佳答案
那是因为当控件第一次通过初始化代码时,静态局部变量只被初始化一次。因此,尽管您在以下行中多次调用该函数:
static X* px1 = new X(i);
只会在第一次调用时执行(i
为零)并且变量将在函数调用之间保留其值。
是的,您可以删除
px1
,但您最好之后将其设置为null 以避免双重释放和未定义的行为。 px2
指向的对象也有泄漏 - 您也必须处理这些对象。
关于c++ - 静态指针和运算符 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055835/