c++ - 静态指针和运算符 new

标签 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);
}

这段代码会输出00 01 02 03 04,但是我不太明白为什么静态指针px1不能用operator new改变它的值

此外,这段代码存在内存泄漏问题。我可以将 deletepx1 一起使用吗?在两个指针上使用delete 是否可以解决内存泄漏问题?

最佳答案

那是因为当控件第一次通过初始化代码时,静态局部变量只被初始化一次。因此,尽管您在以下行中多次调用该函数:

static X* px1 = new X(i);

只会在第一次调用时执行(i 为零)并且变量将在函数调用之间保留其值。

是的,您可以删除 px1,但您最好之后将其设置为null 以避免双重释放和未定义的行为。 px2 指向的对象也有泄漏 - 您也必须处理这些对象。

关于c++ - 静态指针和运算符 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055835/

相关文章:

c++ - 如何使用运行时选择基构造函数初始化不可复制的基类

c++ - 显示 cv2 垫的差异

c++ - 将 IO 寄存器作为模板参数传递

c++ - 用 C/C++ 阅读本文

c++ - Qt 无法编译(10.5 Intel Mac)

C++:接口(interface)强制定义copy-constr

c++ - 类的可变参数模板部分特化以限制模板参数的类型

c++ - 具有互斥量的多个锁和死锁的可能性

c++ - 是否通过unilialized指针UB访问静态类成员?

Windows 的 C++ 互斥量