我可以用不同的参数覆盖全局operator new
,例如我可以有:
void* operator new (std::size_t size) throw (std::bad_alloc);
void* operator new (std::size_t size, int num) throw (std::bad_alloc);
可以单独称为
int* p1 = new int; // calls new(size_t)
int* p2 = new(5) int; // calls new(size_t, int)
由于它们中的每一个都可能使用一些不同的分配方案,所以我需要一个单独的delete()
函数。但是,delete(void*)
不能以同样的方式重载!delete(void*)
是唯一有效的签名。那么上述情况该如何处理呢?
PS我并不是说这是一个好主意。这种事情发生在我身上,所以我在 c++ 中发现了这个“缺陷”(至少在我看来)。如果语言允许new
覆盖,它必须允许delete
覆盖,否则它变得无用。所以我想知道是否有办法解决这个问题,而不是这是一个好主意。