C++ 的 new
1 className a = new className;
new 是 C++ 的关键字,不能被重载 。过程上分为两步:
分配内存。这一步底层就是调用了标题中提到的另一个 operator new 来完成的。也就是说最大的区别是 operator new 只负责分配内存,而 new 调用 operator new 并且调用构造函数。如果类 className 重载了 operator new(属于类里面的运算符),那么上述代码调用的就是
来分配内存,否则调用的是
,由全局的 operator new 来分配。
2. 调用 className 的构造函数。
C++ 的operator new
相信看到这里已经知道他们的区别了,那么举个例子跑一下看看就清楚了!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <iostream> using namespace std;class A { public : static void * operator new (size_t size) { cout << "重载的类operator new 被调用!" << endl; return malloc (size); } static void operator delete (void *ptr) { cout << "重载的类operator delete 被调用!" << endl; return free (ptr); } static void * operator new [](size_t size) { cout << "重载的类operator new[] 被调用!" << endl; return malloc (size); } static void operator delete [](void *ptr) { cout << "重载的类operator delete[] 被调用!" << endl; return free (ptr); } }; int main () { A *a = new A (); A *b = new A[2 ]; delete (a); delete [](b); }
输出:
1 2 3 4 重载的类operator new 被调用! 重载的类operator new[] 被调用! 重载的类operator delete 被调用! 重载的类operator delete[] 被调用!