我是否需要在C++中使用new运算符

Aja*_*jay 0 c++

以下代码块之间有什么区别:

#include<iostream>
using namespace std;
int main()
{
    int *p;
    float *q;
    cout<<p<<"\n"<<q;
}
Run Code Online (Sandbox Code Playgroud)

而这段代码:

#include<iostream>
using namespace std;
int main()
{
    int *p;
    float *q;
    p = new int;
    q = new float;
    cout<<p<<"\n"<<q;
}
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,指针都分配了一些内存吗?

那我为什么要使用new运算符呢?

jog*_*pan 6

不,int *pfloat *p声明指针,但它们没有初始化,所以它们都指向内存中的随机地址.特别是,它们不指向分配给程序的内存空间.

第二段代码正确分配内存并在两个指针中存储该内存的地址.但请注意,您的代码永远不会取消分配内存,因此您会发生内存泄漏.您必须使用delete pdelete q在程序结束时避免这种情况.