operator new
和operator new[]
具有相同的函数原型:void * (size_t size)
。当我要超负荷时,我应该注意什么?
如果我只重载operator new
?
重载operator delete
和operator delete[]
之间有什么区别?
答案 0 :(得分:6)
operator new
用于创建单个对象,例如:
my_class* p = new my_class;
operator new[]
用于创建对象的数组,例如:
my_class* p = new my_class[10];
如果我只重载operator new吗?可以吗?
这取决于您是否需要对阵列版本(operator new[]
)进行特殊处理。默认情况下,operator new[]
会调用operator new
。
基本上,如果你需要重载operator new
,那么过载operator new[]
也会更好,因为如果你想实现自己的内存管理,那么这是一个好主意。让他们保持一致。并且不要忘记nothrow和placement版本(仅作为成员函数,全局版本无法取代)。
operator delete
和operator delete[]
也是如此。
答案 1 :(得分:0)
new创建一个实例,而new []创建一个数组。
与存储数组大小的new相比,new []几乎没有内存开销。
您不能将非默认构造函数与new []。
一起使用new必须与删除一起使用。
new []必须与delete []一起使用。
另一个差异:
new []是一个操作符,用于分配和初始化对象数组并返回指向第一个元素的指针。
这与具有相同行为但对于一个分配而不是数组
的new运算符不同