我有一点怀疑。我不知道我的问题是否有效,但我把它放在SO中。 第一个问题: 当我们在全局或类级别重载operator new和operator delete(不是数组)时,如果我们创建一个像下面这样的对象数组:
A* obj = new A[10];
delete []obj;
然后在那种情况下为什么它调用运算符new并删除,即使我没有为数组重载,即我没有像下面那样重载
void* operator new[](size_t size){}
第二个问题: 但是,如果我为上面的数组重载new和delete运算符,那么它将调用具有数组语法的那个。
最后但并非最不重要,如果我根本不重载new和delete运算符,那么当我创建一个对象数组时将调用哪一个。它是一个数组语法还是普通语法。 如果我的问题不明确,请告诉我。
答案 0 :(得分:3)
当您调用new T[n]
时,内存由operator
new[]( size_t )
分配。如果你更换这个功能,那么你的
替换将被称为。如果您不更换此功能,
将调用默认实现,即
定义:
void*
operator new[]( size_t n )
{
return operator new( n );
}
换句话说,它转发到非数组operator new
功能。因此,如果您已经替换了operator new()
,那么
替换将被称为。
(但你为什么要做new []
?我从未找到过案例
它会有用。)