c++操作符new 与delete学习
一,简单类型,new 一个int和new 一个int 数组
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
void main01()
{
int num = 10;
int *p = new int;
*p = 5;
std::cout << *p << " " << p << std::endl;
delete p;
std::cout << *p << " " << p << std::endl;
system("pause");
}
void main02()
{
int *p = new int[10];
int i = 0;
std::cout << p << std::endl;
for (int i = 0; i < 10; i++)
{
p[i] = i;
std::cout << p[i] << std::endl;
}
delete []p;
std::cout << p << std::endl;
system("pause");
}
void main04() {
int *p = new int[80];
int(*px)[10] = (int(*)[10])p;
int data = 0;
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 10; j++)
{
px[i][j] = data++;
std::cout << " " << px[i][j];
}
std::cout << std::endl;
}
system("pause");
}
二,new 与delete重载
#include <iostream>
class taosheng
{
public:
static int jishuqi;
int *p;
int length;
public:
taosheng()
{
std::cout << "taosheng被创建了" << std::endl;
}
~taosheng()
{
std::cout << "taosheng被了销毁" << std::endl;
}
static void * operator new(size_t size)
{
jishuqi += 1;
std::cout << "对象被创建了" << std::endl;
taosheng *ptemp = ::new taosheng;
return ptemp;
}
static void operator delete(void *p)
{
jishuqi -= 1;
std::cout << "对象被了销毁" << std::endl;
::delete p;
}
};
int taosheng::jishuqi = 0;
void main()
{
taosheng * p1 = new taosheng;
taosheng * p2 = new taosheng;
taosheng * p3 = new taosheng;
delete p1;
std::cout << taosheng::jishuqi << std::endl;
system("pause");
}
二,对象数组的new 与 delete
#include <iostream>
class tansheng
{
int *p;
int length;
public:
tansheng()
{
std::cout << "被创建了" << std::endl;
}
~tansheng()
{
std::cout << "不用了" << std::endl;
}
};
void main001()
{
tansheng *p =new tansheng;
delete []p;
system("pause");
}
参考
delete 和 delete []的真正区别 浅谈 C++ 中的 new/delete 和 new[]/delete[]
|