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

ความแตกต่างระหว่างตัวดำเนินการใหม่และตัวดำเนินการใหม่ใน C ++?


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

คีย์เวิร์ดใหม่

โอเปอเรเตอร์ใหม่เป็นตัวดำเนินการชนิดพิเศษ ซึ่งหมายถึงการร้องขอการจัดสรรหน่วยความจำในส่วนฮีป เมื่อมีหน่วยความจำเพียงพอ จะมีเพียงตัวดำเนินการใหม่เท่านั้นที่จะเริ่มต้นหน่วยความจำให้กับตัวแปรพอยน์เตอร์ เมื่อเราสร้างออบเจ็กต์โดยใช้คีย์เวิร์ดใหม่ตามปกติ คีย์เวิร์ดจะทำงานสองอย่างติดต่อกัน

  • ? จัดสรรบล็อกหน่วยความจำสำหรับวัตถุลงในส่วนฮีป
  • ? เรียกตัวสร้างเพื่อเริ่มต้นบล็อกหน่วยความจำ

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

#include <iostream>
using namespace std;
class Box {
   public:
   Box() {
      cout << "Constructor called!" <<endl;
   }
};
int main() {
   Box* myBox = new Box;
}

ผลลัพธ์

Constructor called!

โอเปอเรเตอร์ใหม่

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

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

#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!