स्थानीय संरचना में सूचक लौटें


85

मैं इस तरह के निर्माण के साथ कुछ कोड नमूने देखें:

type point struct {
  x, y int
}

func newPoint() *point {
  return &point{10, 20}
}

मेरे पास C ++ बैकग्राउंड है और यह मेरे लिए त्रुटि जैसा लगता है। ऐसे निर्माण के शब्दार्थ क्या हैं? क्या स्टैक या ढेर पर नया बिंदु आवंटित किया गया है?


1
इसी तरह का प्रश्न (प्रलेखन के लिए उत्तर लिंक): stackoverflow.com/questions/12098435/…
डेनिस सेगुरेट

@ DenysSéguret यह समान नहीं है
mangusta

जवाबों:


109

जाओ पॉइंटर एस्केप एनालिसिस करता है। यदि पॉइंटर स्थानीय स्टैक से बच जाता है, जो वह इस मामले में करता है, तो ऑब्जेक्ट को ढेर पर आवंटित किया जाता है। यदि यह स्थानीय फ़ंक्शन से नहीं बचता है, तो संकलक इसे स्टैक पर आवंटित करने के लिए स्वतंत्र है (हालांकि यह कोई गारंटी नहीं देता है; यह इस बात पर निर्भर करता है कि क्या पॉइंटर एस्केप विश्लेषण यह साबित कर सकता है कि सूचक इस फ़ंक्शन के लिए स्थानीय रहता है)।


13
यहाँ एक ब्लॉगपोस्ट है (डिस्क्लेमर: जो मैंने लिखा है) जो गो के एस्केप एनालिसिस में थोड़ा और बारीकी से दिखता है
scvalex

@ लिली बॉल ने पूरी तरह से आपका जवाब नहीं दिया। आपका मतलब है कि पॉइंटर से भागने के तथ्य को साबित करना हमेशा संभव है, जबकि यह साबित करना कि पलायन नहीं करना है?
मंगल ग्रह

18

गोलांग "दस्तावेज़ में कहा गया है कि स्थानीय चर के लिए एक सूचक को वापस करने के लिए यह पूरी तरह से कानूनी है।" जैसा कि मैंने यहां पढ़ा

https://groups.google.com/forum/?fromgroups=#!topic/golang-nuts/EYUuead0LsY

मुझे ऐसा लग रहा है कि कंपाइलर आपको पता वापस लौटाता है और आपके लिए यह ढेर पर है। यह गो में एक सामान्य मुहावरा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.