คำถามติดแท็ก new-operator

16
ลบ [] รู้ได้อย่างไรว่าเป็นอาร์เรย์
เอาล่ะฉันคิดว่าเราทุกคนยอมรับว่าสิ่งที่เกิดขึ้นกับรหัสต่อไปนี้ไม่ได้กำหนดขึ้นอยู่กับสิ่งที่ส่งผ่าน void deleteForMe(int* pointer) { delete[] pointer; } ตัวชี้อาจเป็นสิ่งที่แตกต่างกันได้ดังนั้นการดำเนินการอย่างไม่มีเงื่อนไขdelete[]จึงไม่ได้กำหนดไว้ อย่างไรก็ตามสมมติว่าเรากำลังส่งตัวชี้อาร์เรย์ int main() { int* arr = new int[5]; deleteForMe(arr); return 0; } คำถามของฉันคือในกรณีนี้ที่ตัวชี้เป็นอาร์เรย์ใครเป็นคนรู้เรื่องนี้ ฉันหมายถึงจากมุมมองของภาษา / คอมไพเลอร์ไม่มีความคิดว่าarrเป็นตัวชี้อาร์เรย์หรือไม่เมื่อเทียบกับตัวชี้ไปยัง int เดียว Heck ไม่รู้ด้วยซ้ำว่าarrถูกสร้างขึ้นแบบไดนามิกหรือไม่ แต่ถ้าฉันทำสิ่งต่อไปนี้แทน int main() { int* num = new int(1); deleteForMe(num); return 0; } ระบบปฏิบัติการมีความฉลาดพอที่จะลบเพียง int เดียวและไม่ใช้ 'ความสนุกสนานในการฆ่า' บางประเภทโดยการลบหน่วยความจำที่เหลือเกินกว่าจุดนั้น (ตรงกันข้ามกับสตริงที่strlenไม่มีการตัด\0ทอนและจะดำเนินต่อไปจนกว่าจะถึง ฮิต …

9
เหตุใดการใช้ 'ใหม่' จึงทำให้หน่วยความจำรั่ว?
ฉันเรียนรู้ C # ก่อนและตอนนี้ฉันเริ่มต้นด้วย C ++ ตามที่ฉันเข้าใจโอเปอเรเตอร์newใน C ++ ไม่เหมือนกับตัวดำเนินการใน C # คุณสามารถอธิบายสาเหตุของการรั่วไหลของหน่วยความจำในโค้ดตัวอย่างนี้ได้หรือไม่? class A { ... }; struct B { ... }; A *object1 = new A(); B object2 = *(new B());

8
Malloc vs new - padding ที่แตกต่างกัน
ฉันกำลังตรวจสอบรหัส C ++ ของผู้อื่นสำหรับโครงการของเราที่ใช้ MPI สำหรับการประมวลผลประสิทธิภาพสูง (10 ^ 5 - 10 ^ 6 คอร์) รหัสนี้มีวัตถุประสงค์เพื่อให้สามารถสื่อสารระหว่าง (อาจ) เครื่องจักรที่แตกต่างกันในสถาปัตยกรรมที่แตกต่างกัน เขาเขียนความคิดเห็นที่กล่าวถึงบางสิ่งตามบรรทัดของ: ปกติเราจะใช้newและdeleteแต่ที่นี่ผมใช้และmalloc freeสิ่งนี้จำเป็นเนื่องจากคอมไพเลอร์บางตัวจะเพิ่มข้อมูลแตกต่างกันเมื่อnewใช้งานซึ่งนำไปสู่ข้อผิดพลาดในการถ่ายโอนข้อมูลระหว่างแพลตฟอร์มต่างๆ mallocนี้ไม่ได้เกิดขึ้นกับ สิ่งนี้ไม่เข้ากับสิ่งที่ฉันรู้จากคำถามมาตรฐานnewเทียบกับmallocคำถาม อะไรคือความแตกต่างระหว่าง new / delete และ malloc / free? บอกใบ้ถึงแนวคิดที่ว่าคอมไพเลอร์สามารถคำนวณขนาดของวัตถุได้แตกต่างกัน (แต่เหตุใดจึงแตกต่างจากการใช้sizeof) malloc และตำแหน่งใหม่กับใหม่เป็นคำถามที่ได้รับความนิยมพอสมควร แต่พูดถึงการnewใช้ตัวสร้างmallocเท่านั้นซึ่งไม่เกี่ยวข้องกับสิ่งนี้ malloc เข้าใจการจัดตำแหน่งอย่างไร บอกว่าหน่วยความจำได้รับการรับรองว่าจัดวางอย่างถูกต้องnewหรือmallocเป็นสิ่งที่ฉันเคยคิดไว้ก่อนหน้านี้ ฉันเดาว่าเขาวินิจฉัยจุดบกพร่องของตัวเองผิดพลาดในอดีตและอนุมานได้ว่าnewและmallocให้จำนวนช่องว่างที่แตกต่างกันซึ่งฉันคิดว่าอาจไม่เป็นความจริง แต่ฉันไม่พบคำตอบใน Google หรือคำถามก่อนหน้านี้ ช่วยฉันด้วย StackOverflow คุณเป็นความหวังเดียวของฉัน!

15
สตริงเป็นวัตถุใน Java ดังนั้นทำไมเราไม่ใช้ 'ใหม่' ในการสร้าง
โดยปกติเราจะสร้างวัตถุโดยใช้newคำสำคัญเช่น: Object obj = new Object(); สตริงเป็นวัตถุ แต่เราไม่ได้ใช้newในการสร้าง: String str = "Hello World"; ทำไมถึงเป็นแบบนี้? ฉันสามารถสร้าง String ได้newหรือไม่?

7
วิธีเพิ่มแฮชที่มีอยู่ใน Ruby
เกี่ยวกับการเพิ่มkey => valueคู่ในแฮชที่มีอยู่ใน Ruby ฉันอยู่ในขั้นตอนการทำงานผ่าน Apress 'Beginning Ruby และเพิ่งจบบทแฮช ฉันกำลังพยายามหาวิธีที่ง่ายที่สุดในการบรรลุผลลัพธ์เดียวกันด้วยแฮชเหมือนกับที่ทำกับอาร์เรย์: x = [1, 2, 3, 4] x << 5 p x
102 ruby  new-operator  hash 

3
คำหลัก "ใหม่" ใน Scala
ฉันมีคำถามง่ายๆ - เราควรใช้คีย์เวิร์ดใหม่เมื่อสร้างอ็อบเจกต์ใน Scala เมื่อใด เมื่อเราพยายามสร้างอินสแตนซ์วัตถุ Java เท่านั้นหรือไม่?

5
คุณ 'realloc' ใน C ++ ได้อย่างไร?
ฉันจะreallocอยู่ใน C ++ ได้อย่างไร? ดูเหมือนว่าจะหายไปจากภาษา - มีnewและdeleteแต่ไม่ใช่resize! ฉันต้องการมันเนื่องจากโปรแกรมของฉันอ่านข้อมูลมากขึ้นฉันจึงต้องจัดสรรบัฟเฟอร์ใหม่เพื่อเก็บไว้ ฉันไม่คิดว่าdeleteการใช้ตัวชี้แบบเก่าและใช้ตัวชี้newใหม่ที่ใหญ่กว่าเป็นตัวเลือกที่เหมาะสม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.