在读https://blog.csdn.net/zxx910509/article/details/64905107
不理解第二个红标题里函数说明中的一句话。
请看下文
#include <stdio.h>
#include<stdlib.h>
void *operator new(size_t sz)
{
printf("operator new:%d Bytes\n",sz);
void *m=malloc(sz);
if(!m)
puts("out of memory");
return m;
}
void operator delete(void *m)
{
puts("operator delete");
free(m);
}
class S
{
int i[100];
public:
S(){puts("S:S()");}
~S(){puts("~S::S()");}
};
int main( )
{
puts("(1)Creating & Destroying an int");
int *p=new int(47);//输出数据4,因为int后的()用于初始化
delete p;
puts("(2)Creating & Destroying an S");
S *s=new S;//输出400,因为有一个元素个数为100的int整型数组
delete s;
puts("(3)Creating & Destroying S[3]");
S *sa=new S[3];//输出1204,因为有三个类型为S的对象,重载后new函数返回值必为一个长度大于1200的指针
delete []sa;
return 0;
}
函数说明:
使用printf()和puts()而不是iostream,是因为创建一个iostream对象时(像全局的cin/cout/cerr),它们调用new去分配内存。用printf()不会进入死锁状态,因为它不会调用new来初始化自身。
在说明里说用cin和cout可能会进入死锁状态,是怎么进入的?
大佬们教教小弟,不懂啊