document by C++:
系统的有三个声明:
throwing (1) |
void* operator new (std::size_t size); |
---|---|
nothrow (2) |
void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept; |
placement (3) |
void* operator new (std::size_t size, void* ptr) noexcept; |
定义:
分配存储空间的接口。
Allocate storage space
Default allocation functions (single-object form).
特性:
1.可替换,可重载
2.系统定义的是全局函数
例子:
// operator new example #include <iostream> // std::cout #include <new> // ::operator new struct MyClass { int data[100]; MyClass() {std::cout << "constructed [" << this << "]\n";} }; int main () { std::cout << "1: "; MyClass * p1 = new MyClass; // allocates memory by calling: operator new (sizeof(MyClass)) // and then constructs an object at the newly allocated space std::cout << "2: "; MyClass * p2 = new (std::nothrow) MyClass; // allocates memory by calling: operator new (sizeof(MyClass),std::nothrow) // and then constructs an object at the newly allocated space std::cout << "3: "; new (p2) MyClass; // does not allocate memory -- calls: operator new (sizeof(MyClass),p2) // but constructs an object at p2 // Notice though that calling this function directly does not construct an object: std::cout << "4: "; MyClass * p3 = (MyClass*) ::operator new (sizeof(MyClass)); // allocates memory by calling: operator new (sizeof(MyClass)) // but does not call MyClass‘s constructor delete p1; delete p2; delete p3; return 0; }
时间: 2024-10-07 05:26:21