重载new和删除运算符

时间:2013-11-08 14:58:15

标签: c++ arrays

我有一点怀疑。我不知道我的问题是否有效,但我把它放在SO中。 第一个问题: 当我们在全局或类级别重载operator new和operator delete(不是数组)时,如果我们创建一个像下面这样的对象数组:

A* obj = new A[10];
delete []obj;

然后在那种情况下为什么它调用运算符new并删除,即使我没有为数组重载,即我没有像下面那样重载

void* operator new[](size_t size){}

第二个问题: 但是,如果我为上面的数组重载new和delete运算符,那么它将调用具有数组语法的那个。

最后但并非最不重要,如果我根本不重载new和delete运算符,那么当我创建一个对象数组时将调用哪一个。它是一个数组语法还是普通语法。 如果我的问题不明确,请告诉我。

1 个答案:

答案 0 :(得分:3)

当您调用new T[n]时,内存由operator new[]( size_t )分配。如果你更换这个功能,那么你的 替换将被称为。如果您不更换此功能, 将调用默认实现,即 定义:

void*
operator new[]( size_t n )
{
    return operator new( n );
}

换句话说,它转发到非数组operator new 功能。因此,如果您已经替换了operator new(),那么 替换将被称为。

(但你为什么要做new []?我从未找到过案例 它会有用。)