根据这
void operator delete (void*); (1)
void operator delete[](void*); (2)
void operator delete (void*, const std::nothrow_t&); (3)
void operator delete[](void*, const std::nothrow_t&); (4)
void operator delete(void*, std::size_t) (5)
void operator delete[](void*, std::size_t) (6)
void operator delete(void*, std::size_t, const std::nothrow_t&) (7)
void operator delete[](void*, std::size_t, const std::nothrow_t&) (8)如果提供了用户定义的替换,则调用(5-8)而不是(1-4)。标准库实现与(1-4)相同。
我相信引用的说法是正确的;但是,我不能按照C++14标准草案n3797来证实这一点。
我检查了3.7.4和18.6,没有发现任何明确要求删除表达式必须调用void ::operator delete(void*, std::size_t)而不是void ::operator delete(void*) (如果存在的话)。
你能给我看一下标准草案的右边一页吗?
发布于 2014-07-07 06:19:08
对取消分配职能的选择解释如下:
5.3.5删除expr.delete
10如果类型是完全的,并且如果去分配函数查找finds同时具有一个指针参数的通常的去分配函数和一个同时具有指针参数和大小参数的通常的去分配函数,那么所选的去分配函数应该是具有两个参数的函数。否则,所选的去分配函数将是具有一个参数的函数。
https://stackoverflow.com/questions/24603894
复制相似问题