Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ความแตกต่างระหว่าง new operator และ operator new ใน C++


ใน C++ เมื่อเราต้องการสร้างออบเจกต์ใหม่ เราต้องสร้างบล็อกหน่วยความจำในหน่วยความจำ แล้วเรียก constructor เพื่อเริ่มต้นบล็อกหน่วยความจำ เราสามารถสร้างองค์ประกอบหน่วยความจำได้โดยใช้คีย์เวิร์ด new new operator นี้ทำ 2 งานติดต่อกัน แต่ operator new เพียงแค่สร้างพื้นที่หน่วยความจำ

New Keyword (new operator)

new operator เป็นออเปอเรเตอร์ประเภทพิเศษ ที่แสดงคำขอจัดสรรหน่วยความจำบน heap section เมื่อมีหน่วยความจำเพียงพอ new operator จะเริ่มต้นหน่วยความจำให้กับตัวแปร pointer เมื่อเราสร้างออบเจกต์โดยใช้ new keyword ปกติ มันทำ 2 งานติดต่อกัน

  • จัดสรรบล็อกหน่วยความจำสำหรับออบเจกต์ใน heap section
  • เรียก constructor เพื่อเริ่มต้นบล็อกหน่วยความจำ

โค้ดตัวอย่าง

#include <iostream>
using namespace std;

class Box {
public:
    Box() {
        cout << "Constructor called!" << endl;
    }
};

int main() {
    Box* myBox = new Box;
}

ผลลัพธ์

Constructor called!

Operator New

operator new เป็นฟังก์ชัน ฟังก์ชันนี้ใช้สำหรับโอเวอร์โหลด new operator โดยใช้นี้เราสามารถจัดสรร raw memory block ได้ แนวคิดคล้ายกับฟังก์ชัน malloc() หรือ calloc() ฟังก์ชันนี้ไม่เรียก constructor ดังนั้นหน่วยความจำจึงไม่ถูกเริ่มต้น อย่างไรก็ตาม หลังจากคืนค่า pointer จากเมธอดที่โอเวอร์โหลดนี้ คอมไพเลอร์จะเรียก constructor หลังจากนั้น

โค้ดตัวอย่าง

#include <iostream>
#include <cstdlib>
using namespace std;

class Box {
public:
    Box() {
        cout << "Constructor called!" << endl;
    }
    void *operator new(size_t size) {
        cout << "Call Operator New" << endl;
        void *p = malloc(size);
        return p;
    }
};

int main() {
    Box* myBox = new Box;
}

ผลลัพธ์

Call Operator New
Constructor called!