আমি জানি শিরোনামটি পরিচিত বলে মনে হচ্ছে কারণ অনেকগুলি অনুরূপ প্রশ্ন রয়েছে তবে আমি সমস্যার ভিন্ন দিক চাইছি (স্ট্যাকের মধ্যে জিনিস রাখার এবং সেগুলি গাদা করার মধ্যে পার্থক্য জানি)।
জাভাতে আমি সর্বদা "স্থানীয়" অবজেক্টের জন্য উল্লেখগুলি ফিরিয়ে দিতে পারি
public Thing calculateThing() {
Thing thing = new Thing();
// do calculations and modify thing
return thing;
}
সি ++ তে অনুরূপ কিছু করার জন্য আমার কাছে 2 টি বিকল্প রয়েছে
(1) যখনই আমার কোনও বস্তুর "ফেরত" দরকার হয় আমি রেফারেন্সগুলি ব্যবহার করতে পারি
void calculateThing(Thing& thing) {
// do calculations and modify thing
}
তারপরে এটি ব্যবহার করুন
Thing thing;
calculateThing(thing);
(২) অথবা আমি গতিশীলভাবে বরাদ্দকৃত অবজেক্টে একটি পয়েন্টার ফিরিয়ে দিতে পারি
Thing* calculateThing() {
Thing* thing(new Thing());
// do calculations and modify thing
return thing;
}
তারপরে এটি ব্যবহার করুন
Thing* thing = calculateThing();
delete thing;
প্রথম পদ্ধতির সাহায্যে আমি ম্যানুয়ালি ম্যানুয়ালি মুক্ত করতে হবে না, তবে আমার কাছে এটি কোডটি পড়া কঠিন করে তোলে। দ্বিতীয় পদ্ধতির সমস্যাটি হ'ল, আমাকে মনে রাখতে হবে delete thing;
, যা দেখতে খুব সুন্দর দেখাচ্ছে না। আমি অনুলিপি করা মানটি ফিরিয়ে দিতে চাই না কারণ এটি অদক্ষ (আমার মনে হয়), তাই এখানে প্রশ্নগুলি আসুন
- তৃতীয় কোন সমাধান আছে (এর জন্য মানটির অনুলিপি লাগবে না)?
- আমি যদি প্রথম সমাধানটিতে থাকি তবে কি কোনও সমস্যা আছে?
- আমার দ্বিতীয় সমাধানটি কখন এবং কেন ব্যবহার করা উচিত?