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

“ตำแหน่งใหม่” ใน C ++ มีประโยชน์อย่างไร


ในส่วนนี้เราจะดูว่าตัวดำเนินการใหม่ตำแหน่งใน C++ คืออะไร ตำแหน่งใหม่นี้เป็นอีกรูปแบบหนึ่งของตัวดำเนินการใหม่ ตัวดำเนินการใหม่ปกติดำเนินการสองสิ่ง มันจัดสรรหน่วยความจำ แล้วสร้างวัตถุในหน่วยความจำที่จัดสรร

ตัวดำเนินการใหม่จัดสรรหน่วยความจำในส่วนฮีปและสร้างอ็อบเจ็กต์ที่นั่น แต่สำหรับการจัดวางตัวดำเนินการใหม่ มันสร้างวัตถุตามที่อยู่ที่กำหนด ในการจัดสรรหน่วยความจำคืน เราสามารถใช้คำสำคัญลบ หากหน่วยความจำถูกจัดสรรโดยใช้ตัวดำเนินการใหม่ แต่สำหรับตำแหน่งใหม่ จะไม่มีคุณลักษณะการลบตำแหน่ง

สรุปได้ว่า การจัดวางตำแหน่งใหม่ทำให้คุณสามารถ "สร้าง" อ็อบเจ็กต์ในหน่วยความจำที่จัดสรรให้กับตัวแปรที่กำหนดแล้ว สิ่งนี้มีประโยชน์สำหรับการปรับให้เหมาะสม เนื่องจากจะเร็วกว่าที่จะไม่จัดสรรและนำหน่วยความจำเดิมกลับมาใช้ใหม่ซึ่งถูกกำหนดไว้แล้ว สามารถใช้ได้ดังนี้:

new (address) (type) initializer

เราสามารถระบุที่อยู่ที่เราต้องการสร้างวัตถุใหม่ประเภทที่กำหนด ตัวอย่างเช่น

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

#include<iostream>
using namespace std;
int main() {
   int a = 5;
   cout << "a = " << a << endl;
   cout << "&a = " << &a << endl;
   // Placement new changes the value of X to 100
   int *m = new (&a) int(10);
   cout << "\nAfter using placement new:" << endl;
   cout << "a = " << a << endl;
   cout << "m = " << m << endl;
   cout << "&a = " << &a << endl;
   return 0;
}

ผลลัพธ์

a = 5
&a = 0x22fe34
After using placement new:
a = 10
m = 0x22fe34
&a = 0x22fe34