在处理项目时,我在代码中调用了全局运算符delete:
::operator delete((void*)m_data, size() * sizeof(T));
这使我的程序崩溃,但这不是我的问题。崩溃时,Visual Studio打开了scalar_delete.cpp文件,该文件包含带标量的operator delete实现。在那里,我完全惊讶于标量参数被忽略了!
//
// delete_scalar_size.cpp
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
// Defines the scalar operator delete, size_t overload.
//
#include <vcruntime_internal.h>
#include <vcruntime_new.h>
void __CRTDECL operator delete(void* block, size_t) noexcept
{
operator delete(block);
}
我想知道为什么会这样,以及为什么如果它没有做任何特别的事情,他们甚至会提供这种重载。
编辑:@StoryTeller的评论已经解释了为什么这个重载存在,但我仍然不确定为什么它是空的,因为它对我来说似乎不合逻辑。