new operator 和 operator new 的区别

new operatoroperator new 是 C++ 中两个不同的概念。

1. new operator(或称 new 操作符)

  • 定义new operator 是 C++ 中的关键字,用于分配内存并调用构造函数来初始化对象。它不仅仅是分配内存,还包括对象的创建和初始化。
  • 语法
MyClass* obj = new MyClass(); // new operator

这里,new MyClass() 做了以下事情:

    1. 调用 operator newMyClass 分配内存。
    2. 调用 MyClass 的构造函数在分配的内存上创建一个对象。
    3. 返回指向新创建对象的指针。
  • 功能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();          // 在已分配的内存上构造对象
    1. operator new 通常是系统提供的,也可以由用户重载以自定义内存分配行为。
    2. 它只负责分配内存,不进行对象的初始化。初始化对象需要手动调用构造函数,通常使用 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++ 内存管理和自定义对象的创建过程至关重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值