乐闻世界logo
搜索文章和话题

“new operator”和“operator new”之间的区别?

6 个月前提问
5 个月前修改
浏览次数22

1个答案

1

在C++中,“new operator”和“operator new”虽然听起来相似,但它们在功能上有显著的不同。

new operator

“new operator”是C++中一个内置的操作符,用于分配内存并调用构造函数来初始化对象。使用“new operator”时,它首先为对象分配足够的内存(通常是通过调用“operator new”函数来实现内存分配),然后在分配的内存上调用相应的构造函数来构建对象。

示例:

cpp
class MyClass { public: MyClass() { cout << "Constructor is called." << endl; } }; int main() { // 使用new operator创建MyClass的实例 MyClass* myObject = new MyClass(); }

在这个例子中,new MyClass()是一个new operator,它会调用MyClass的默认构造函数。

operator new

“operator new”则是一个函数,可以被重载,其主要责任是分配足够的内存空间,用来存放特定类型的对象。它不负责调用构造函数来初始化对象。这意味着,当你调用“operator new”时,你只是获取了足够存放对象的原始内存。

示例:

cpp
void* operator new(size_t size) { cout << "Custom operator new called." << endl; return malloc(size); // 分配内存 } class MyClass { public: MyClass() { cout << "Constructor is called." << endl; } }; int main() { // 直接调用operator new,分配内存 void* mem = operator new(sizeof(MyClass)); // 在分配的内存上手动调用构造函数 MyClass* myObject = new (mem) MyClass(); }

在这个例子中,operator new(sizeof(MyClass))只是分配内存,并不调用MyClass的构造函数。构造函数是通过后面的placement new(new (mem) MyClass())显式调用的。

总结

简而言之,new operator是一个高级的操作,它自动处理内存分配和对象的构造。而operator new更像是一个底层工具,只负责内存分配,通常用于自定义内存分配策略或在构造对象前进行特定的内存处理。

2024年7月12日 09:15 回复

你的答案