做分享网站,广西城乡建设厅官网,怎样建立免费的个人网站,南京网站制作的价格C中的new与delete new 与 delete定位new表达式 new 与 delete
在C中需要动态申请内存空间时需要使用 new 与 delete 这两个操作符
#include iostream
using namespace std;
int main()
{int* p1 new int;//开辟一块int类型大小的空间给p1int* p2 new int(1);//开辟… C中的new与delete new 与 delete定位new表达式 new 与 delete
在C中需要动态申请内存空间时需要使用 new 与 delete 这两个操作符
#include iostream
using namespace std;
int main()
{int* p1 new int;//开辟一块int类型大小的空间给p1int* p2 new int(1);//开辟一块int类型大小的空间给p2并且初始化为1int* p3 new int[10];//开辟一块10个int类型大小的空间给p3int* p4 new int[10] {1, 2, 3, 4};//开辟一块10个int类型大小的空间给p4并且将前四个初始化delete p1;delete p2;delete[] p3;delete[] p4;return 0;
}这里需要明确在C中new 的最底层实际调用的也是malloc,但除此之外还会调用被new类型的构造函数delete 的最底层则是free但除此之外还会调用被delete类型的析构函数
#include iostream
using namespace std;
class A
{
public:A(int x 0){cout 调用构造函数A() endl;}~A(){cout 调用析构函数~A() endl;}
private://.......
};int main()
{A* p1 new A;A* p2 new A(1);A* p3 new A[3];A* p4 new A[3]{ 1,2,3 };delete p1;delete p2;delete[] p3;delete[] p4;return 0;
}输出结果如下 由此可见new和delete在使用时会调用对应的构造和析构函数 注意 new delete 与 new[] delete[] 不要进行错配使用否则程序可能崩溃
定位new表达式
在C中new底层其实就是 operator new 构造函数 同理 delete 也是 operator delete 析构函数 所以我们可以将其拆开这样动态申请空间
#include iostream
using namespace std;
class A
{
public:A(int x 0){cout 调用构造函数A() endl;}~A(){cout 调用析构函数~A() endl;}
private://.......
};
int main()
{A* p (A*)operator new(sizeof(A));//声明空间new(p)A();//调用构造函数进行初始化p-~A();//调用析构函数释放空间operator delete(p);//delete释放动态申请的空间return 0;
}