স্থানীয় কাঠামোতে পয়েন্টার ফেরান


85

আমি এর মতো কনস্ট্রাক্ট সহ কিছু কোড নমুনা দেখতে পাচ্ছি:

type point struct {
  x, y int
}

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

আমার সি ++ ব্যাকগ্রাউন্ড রয়েছে এবং এটি আমার জন্য ত্রুটি বলে মনে হচ্ছে। এ জাতীয় নির্মাণের অর্থ কী? নতুন পয়েন্ট স্ট্যাক বা গাদা উপর বরাদ্দ করা হয়?


4
একটি অনুরূপ প্রশ্ন (ডকুমেন্টেশনের উত্তরের লিঙ্কগুলি): স্ট্যাকওভারফ্লো
অস্বীকৃতি সাগরেট

@ ডেনিসসগুরেট এটির মতো নয়
মঙ্গুস্তার

উত্তর:


109

গো পয়েন্টার পলায়ন বিশ্লেষণ সম্পাদন করে। যদি পয়েন্টার লোকাল স্ট্যাকটি থেকে বেরিয়ে যায়, যা এটি এই ক্ষেত্রে করে তবে অবজেক্টটি গাদাতে বরাদ্দ দেওয়া হয়। এটি স্থানীয় ফাংশন থেকে বাঁচতে না পারলে, সংকলকটি স্ট্যাকের জন্য এটি বরাদ্দ করতে মুক্ত (যদিও এটি কোনও গ্যারান্টি দেয় না; এটি পয়েন্টার অব্যাহতি বিশ্লেষণ প্রমাণ করতে পারে যে পয়েন্টারটি এই ফাংশনে স্থানীয় থাকে)।


13
এখানে একটি ব্লগপোস্ট রয়েছে (দাবি অস্বীকার: যা আমি লিখেছি) যা গো পালানোর বিশ্লেষণকে আরও ঘনিষ্ঠভাবে দেখায়
scvalex

@ লিলিবালার্ড আপনার উত্তর পুরোপুরি পান নি। আপনি বোঝাতে চেয়েছেন যে পয়েন্টার থেকে বেঁচে থাকার সত্যতা প্রমাণ করা সর্বদা সম্ভব, যখন পালাতে না পারার ঘটনাটি প্রমাণ করে না?
মঙ্গলস্তা

18

গোলং "ডকুমেন্টেশন বলে যে স্থানীয় ভেরিয়েবলে পয়েন্টার ফিরিয়ে দেওয়া পুরোপুরি আইনী।" আমি যেমন এখানে পড়েছি

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

আমি দেখে মনে হচ্ছে সংকলকটি আপনাকে ঠিকানাটি ফিরে দেখায় এবং কেবল এটি আপনার জন্য গাদা করে তোলে। এটি গোতে একটি সাধারণ প্রতিমা।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.