自从我开始学习 C++ 以来,我一直读到“new”运算符在将指针返回到分配的内存之前调用对象的构造函数。
因此,出于好奇,我检查了“新”的源代码,并在http://gcc.gnu.org/viewcvs/gcc/trunk/libstdc%2B%2B-v3/libsupc%2B%2B/找到了以下内容new_op.cc?revision=197380&view=markup
_GLIBCXX_WEAK_DEFINITION void *
operator new (std::size_t sz) _GLIBCXX_THROW (std::bad_alloc)
{
void *p;
/* malloc (0) is unpredictable; avoid it. */
if (sz == 0)
sz = 1;
p = (void *) malloc (sz);
while (p == 0)
{
new_handler handler = std::get_new_handler ();
if (! handler)
_GLIBCXX_THROW_OR_ABORT(bad_alloc());
handler ();
p = (void *) malloc (sz);
}
return p;
}
我没有看到任何构造函数被调用或任何类型的机制来识别对象的类型。
那么,这是如何做到的呢?编译器是否通过在分配的内存上调用构造函数来玩一些技巧?任何帮助将不胜感激。
此外,在 new[] (在下面的链接)的情况下,不会进行任何条目来跟踪数组中的元素数量。那么,delete[] 怎么知道要销毁多少元素呢?
我经历了许多关于 SO 的相关问题,也搜索了它,但找不到答案。