在上面的例子中operator new中的size是怎么传入进去的
时间: 2023-11-22 12:54:23 浏览: 20
在调用operator new时,通常会在其参数中指定所需的内存大小。例如,当你使用new表达式动态分配内存时,编译器会自动将对象的大小作为参数传递给operator new函数。例如:
```
int* p = new int;
```
在这个示例中,编译器将int类型的大小作为参数传递给operator new函数,以便动态分配一个适当大小的内存块,然后将指针p指向该内存块的起始位置。
相关问题
类中operator new
在C++中,operator new是用于动态分配内存的函数。它可以被重载,以便在分配内存时执行特定的操作。在类中重载operator new可以实现自定义内存分配策略,例如可以使用自定义的内存池来提高程序的性能。
在类中重载operator new,可以使用以下语法:
```c++
void* operator new(size_t size);
```
其中,size_t是一个无符号整数类型,表示要分配的内存大小。
示例代码:
```c++
class MyClass {
public:
void* operator new(size_t size) {
void* p = malloc(size);
std::cout << "Allocating " << size << " bytes" << std::endl;
return p;
}
};
int main() {
MyClass* obj = new MyClass();
delete obj;
return 0;
}
```
在上面的例子中,MyClass类重载了operator new,使用标准库函数malloc来分配内存,并在分配内存时输出一条消息。当程序执行new MyClass()时,会调用MyClass的operator new函数来分配内存。当程序执行delete obj时,会调用默认的operator delete函数来释放内存。
c++中new运算符
C++中的new运算符用于动态分配内存并返回指向该内存的指针。它的语法如下:
```
new data-type;
```
其中,data-type是要分配内存的数据类型。例如,要分配一个整数的内存,可以使用以下代码:
```c++
int *p = new int;
```
这将分配一个整数的内存,并将指向该内存的指针存储在p中。要释放这个内存,可以使用delete运算符:
```c++
delete p;
```
这将释放p指向的内存。
除了上述用法外,new运算符还可以用于分配数组和自定义类型的内存。对于数组,可以使用以下语法:
```c++
new data-type [size];
```
其中,size是数组的大小。例如,要分配一个包含5个整数的数组,可以使用以下代码:
```c++
int *p = new int[5];
```
这将分配一个包含5个整数的数组,并将指向该数组的指针存储在p中。要释放这个数组,可以使用delete[]运算符:
```c++
delete[] p;
```
对于自定义类型,可以重载new和delete运算符来控制内存的分配和释放。例如,以下代码演示了如何重载new和delete运算符来分配和释放MyClass类型的内存:
```c++
class MyClass {
public:
void* operator new(size_t size) {
void* p = ::operator new(size); // do something
return p;
}
void operator delete(void* p) {
// do something
::operator delete(p);
}
private:
// data members
};
```
在这个例子中,重载的new运算符使用全局的operator new函数来分配内存,并在分配内存后执行一些自定义操作。重载的delete运算符也执行一些自定义操作,并使用全局的operator delete函数来释放内存。