operator new (<new>)
一个新的表达式分配调用的函数分配数组存储对象。
void *operator new[](
std::size_t _Count
)
throw(std::bad_alloc);
void *operator new[](
std::size_t _Count,
const std::nothrow_t&
) throw( );
void *operator new[](
std::size_t _Count,
void* _Ptr
) throw( );
参数
_Count
字节数为数组对象将存储区。_Ptr
要返回的指针。
返回值
指向新分配内存的最小字节地址的指针。或 _Ptr.
备注
第一个函数由 new[] 表达式调用分配存储正确对齐的 _Count 字节表示该范围所有数组对象或更小。程序可以定义与替换标准C++库定义的默认版本的此函数签名的函数。所需的行为与 new运算符(size_t)。默认行为是返回 operator new(_Count)。
第二个函数通过位置 new[] 表达式调用分配存储正确对齐的 _Count 字节表示该范围所有数组对象。程序可以定义与替换标准C++库定义的默认版本的此函数签名的函数。默认行为是返回 operator新建(_Count),则该功能成功。否则,它将返回null指针。
第三个函数通过位置 new[] 表达式,窗体中调用 新建 (参数) T[]N。此处,参数 由一个对象指针。函数返回 _Ptr。
为 **operator new[]**分配的未使用记忆字段,请调用 运算符删除[]。
有关引发的或nonthrowing的行为新信息,请参见 新建和删除运算符。
示例
// new_op_alloc.cpp
// compile with: /EHsc
#include <new>
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "Construction MyClass." << this << endl;
};
~MyClass() {
imember = 0; cout << "Destructing MyClass." << this << endl;
};
int imember;
};
int main() {
// The first form of new delete
MyClass* fPtr = new MyClass[2];
delete[ ] fPtr;
// The second form of new delete
char x[2 * sizeof( MyClass ) + sizeof(int)];
MyClass* fPtr2 = new( &x[0] ) MyClass[2];
fPtr2[1].~MyClass();
fPtr2[0].~MyClass();
cout << "The address of x[0] is : " << ( void* )&x[0] << endl;
// The third form of new delete
MyClass* fPtr3 = new( nothrow ) MyClass[2];
delete[ ] fPtr3;
}
示例输出
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
Construction MyClass.0012FED4
Construction MyClass.0012FED8
Destructing MyClass.0012FED8
Destructing MyClass.0012FED4
The address of x[0] is : 0012FED0
Construction MyClass.00311AEC
Construction MyClass.00311AF0
Destructing MyClass.00311AF0
Destructing MyClass.00311AEC
要求
标头: <new>
命名空间: std