自从我开始学习C++以来,我一直认为在将指针返回给分配的内存之前,'new'运算符会调用对象的构造函数。什么时候在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;
}
以下我没有看到被调用任何构造函数或任何类型的机制来识别的类型目的。
那么,这是如何完成的?编译器是否通过调用分配内存上的构造函数来玩一些技巧?任何帮助将不胜感激。
此外,如果是新的[](在下面的链接),没有条目正在跟踪数组中的元素数量。那么,如何删除[]知道有多少元素被破坏?
我经历了许多相关的问题继续SO,也GOOGLE了它,但无法找到答案。
非常感谢Mike和Alexander。因此,在编译期间,编译器必须添加额外的代码以在删除的情况下调用构造函数和析构函数。我的理解是否正确? – Rommel