- 论坛徽章:
- 0
|
int *pi = new int;
原帖由 "THEBEST" 发表:
void* operator new(std::size_t) throw (std::bad_alloc);
void* operator new[](std::size_t) throw (std::bad_alloc);
void operator delete(void*) throw();
void operator delete[](void*) throw();
...
这是我的dev-cpp安装目录下的一个<new>;头文件中的部分内容.
你们的没有见过吗?
不错,是有这么回事。但是这些函数跟你在程序中使用的 new 和 delete 不是一回事: new 或者 delete 是通过调用这些函数来实现真正的内存分配和释放工作的。
在程序中的 new 操作符返回与创建数据类型相应的指针类型,但不是 void *。关于这一点,可以从以下两方面来验证。
1. 已经知道,在C++中,void * 类型的数据是不能直接给其它类型的指针赋值的。例如:
void* pv = 0;
char* pc = 0;
pv = pc; // valid: char* -->; void*
pc = pv: // invalid: void* -->; char*
既然如此,如果 new 返回的类型是 void*,则下面的赋值也应该是非法的。
pc = new char; // if new returns void*, then void* -->; char*, should be invalid.
但是,事实上却不是这么回事。
2. 在程序中故意使类型不一致,然后看编译器的出错信息,看告诉我们什么。例如:
pc = new int;
我的编译器告诉我:cannot convert `int*' to `char*' in assignment。从而你也可以知道 new int 返回的类型是 int*,而不是所谓的 void*。 |
|