C++ operator new
时间: 2024-01-27 16:12:27 浏览: 168
C++中的`operator new`是一个用于动态分配内存的函数。它的原型如下:
```c++
void* operator new(std::size_t size);```
其中,`std::size_t`是一个无符号整数类型,表示要分配的内存大小。`operator new`会在堆上分配一块大小为`size`的内存,并返回指向该内存块的指针。
如果分配失败,`operator new`会抛出一个`std::bad_alloc`异常。
需要注意的是,`operator new`只负责分配内存,不会调用构造函数初始化对象。如果需要在分配内存的同时调用构造函数,可以使用`placement new`。
相关问题
c++ new 和operator new
C++中的new和operator new是用于动态分配内存的操作符。
new操作符在使用时会先调用operator new函数分配内存,然后调用构造函数初始化对象。这个过程可以简化为:
```cpp
T* obj = new T(args);
```
这里的T是要分配内存的对象类型,args是传递给构造函数的参数。new操作符返回一个指向分配的内存的指针。
operator new函数负责分配内存,并返回指向分配内存的指针。其原型如下:
```cpp
void* operator new(std::size_t size);
```
其中,size是需要分配的内存大小。
相对应地,delete操作符用于释放通过new操作符分配的内存,它会先调用析构函数销毁对象,然后调用operator delete函数释放内存。可以简化为:
```cpp
delete obj;
```
operator delete函数负责释放通过new操作符分配的内存,其原型如下:
```cpp
void operator delete(void* ptr);
```
总结:new和operator new联合使用可以方便地分配和释放内存,并进行对象的初始化和析构操作。
简答C++中new operator,operator new,malloc的区别
在C++中,new operator, operator new和malloc都可以用来在堆上分配内存,但它们之间有一些区别:
1. new operator是C++中的操作符,它会调用operator new来分配内存,然后调用对象的构造函数来初始化对象。与malloc不同,它可以自动计算所需的空间大小,并且不需要手动释放内存,因为它会自动调用对象的析构函数并释放内存。
2. operator new是一个函数,它只负责分配指定大小的内存,不会调用任何构造函数。因此,如果你想在分配内存后调用构造函数,你需要使用new operator。
3. malloc是C语言中的函数,它只负责分配指定大小的内存,不会调用任何构造函数。因此,如果你想在分配内存后调用构造函数,你需要使用new operator。
总之,new operator和operator new更适合C++中的对象分配,因为它们可以自动调用构造函数和析构函数。而malloc更适合C语言中的内存分配。
阅读全文