new operator 和 operator new 是 C++ 中两个不同的概念。
1. new operator(或称 new 操作符)
- 定义:
new operator是 C++ 中的关键字,用于分配内存并调用构造函数来初始化对象。它不仅仅是分配内存,还包括对象的创建和初始化。 - 语法:
MyClass* obj = new MyClass(); // new operator
这里,new MyClass() 做了以下事情:
-
- 调用
operator new为MyClass分配内存。 - 调用
MyClass的构造函数在分配的内存上创建一个对象。 - 返回指向新创建对象的指针。
- 调用
- 功能:
new operator处理内存分配和对象初始化两个步骤。它是 C++ 中最常用的用于创建动态对象的表达式。
2. operator new(或称 new 运算符函数)
- 定义:
operator new是一个函数,专门用于分配原始内存(raw memory)。它只负责内存分配,不调用构造函数。 - 语法:
void* memory = operator new(sizeof(MyClass)); // operator new
这里的 operator new 只是为 MyClass 类型分配了足够的内存,返回的 memory 是一个 void* 指针。
- 功能:
例如:
void* memory = operator new(sizeof(MyClass)); // 分配内存
MyClass* obj = new(memory) MyClass(); // 在已分配的内存上构造对象
-
operator new通常是系统提供的,也可以由用户重载以自定义内存分配行为。- 它只负责分配内存,不进行对象的初始化。初始化对象需要手动调用构造函数,通常使用
placement new技术。
3. 关键区别
- 作用范围:
-
new operator:用于动态创建并初始化对象,包括调用operator new分配内存和调用构造函数初始化对象。operator new:仅用于分配内存,不负责对象的初始化。
- 返回值:
-
new operator返回一个指向已初始化对象的指针。operator new返回一个指向分配内存的void*指针。
- 使用场景:
-
new operator是高级抽象,用于日常的对象动态分配和初始化。operator new是底层机制,用于需要自定义内存分配策略的场景,例如优化性能或实现自定义内存池。
4. 总结
- 使用
new operator来创建对象时,不仅分配了内存,还初始化了对象。 operator new只是单纯地分配内存,通常和placement new搭配使用以手动初始化对象。
理解这两者的区别对于深入掌握 C++ 内存管理和自定义对象的创建过程至关重要。
1万+

被折叠的 条评论
为什么被折叠?



