静态指针和操作符新

sca*_*bly 2 c++

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.

此外,此代码有内存泄漏问题.我可以deletepx1吗?是否会delete在两个指针上使用解决内存泄漏问题?

sha*_*oth 12

这是因为当控件首次通过初始化代码时,静态本地只被初始化一次.因此,虽然您多次调用该函数以下行:

static X* px1 = new X(i);
Run Code Online (Sandbox Code Playgroud)

只会在第一次调用中执行(i为零),变量将在函数调用之间保持其值.

是的,您可以,delete px1但最好将其设置为null,以避免双重自由和未定义的行为.你也有泄漏与指向的对象px2- 你也必须照顾这些对象.