যেহেতু সি ++ 11 আপনার এটিকে কনস্টের চেয়ে বেশি মূল্য হিসাবে নেওয়া উচিত এবং আপনি যা ভাবেন তার চেয়ে বেশি বার।
আপনি যদি std :: shared_ptr (অন্তর্নিহিত টাইপ টির পরিবর্তে) নিচ্ছেন তবে আপনি এটি করছেন কারণ আপনি এটির সাথে কিছু করতে চান।
আপনি যদি এটি কপি করতে চান অন্য কোথাও এটি অনুলিপি দ্বারা নেওয়া আরও বুদ্ধিমান এবং স্ট্যান্ড :: এটিকে কনস্টের মাধ্যমে না নিয়ে অভ্যন্তরীণভাবে সরানো এবং তারপরে এটি অনুলিপি করা উচিত। এটি কারণ আপনি কলারকে বিকল্প হিসাবে মঞ্জুরি দেবেন std :: আপনার ফাংশনটি কল করার সময় ভাগ করে নেওয়া_আপনার সরান, এইভাবে নিজেকে বৃদ্ধি এবং হ্রাস ক্রিয়াকলাপগুলির একটি সেট সংরক্ষণ করুন। অথবা না. এটি হ'ল, ফাংশনটির আহ্বায়ক ফাংশনটি কল করার পরে তার চারপাশে std :: shared_ptr দরকার কিনা এবং স্থানান্তরিত হবে কি না তা নির্ভর করবে decide যদি আপনি কনস্ট & এ পাস করেন তবে এটি অর্জনযোগ্য নয় এবং সুতরাং এটির পরে এটি মান দ্বারা নেওয়া ভাল।
অবশ্যই, যদি কলার উভয়ের পক্ষে তার শেয়ারড_পিটারের বেশি সময় প্রয়োজন হয় (সুতরাং এটি স্ট্যান্ড করতে পারে না :: এটি সরানো যায় না) এবং আপনি ফাংশনে একটি সরল অনুলিপি তৈরি করতে চান না (বলুন আপনি একটি দুর্বল পয়েন্টার চান, বা আপনি কেবল কখনও কখনও চান) কোনও শর্তের উপর নির্ভর করে এটি অনুলিপি করতে), তারপরে কোনও কনস্ট এবং তারপরে আরও ভাল।
উদাহরণস্বরূপ, আপনার করা উচিত
void enqueue(std::shared<T> t) m_internal_queue.enqueue(std::move(t));
উপর
void enqueue(std::shared<T> const& t) m_internal_queue.enqueue(t);
কারণ এই ক্ষেত্রে আপনি সর্বদা অভ্যন্তরীণভাবে একটি অনুলিপি তৈরি করেন
shared_ptr
লোকের নাম রাখছি , এবং আমি চাইলে এটি পরিবর্তন করতে পারি" ", যখন মান সংস্করণটি বলে" আমি আপনার অনুলিপি করতে যাচ্ছিshared_ptr
, আমি যখন এটি পরিবর্তন করতে পারি তখন আপনি কখনই জানতে পারবেন না। ) কনস্ট-রেফারেন্স প্যারামিটার হ'ল আসল সমাধান, যা বলে যে "আমি কিছু লোকের নাম রাখছিshared_ptr
, এবং আমি এটি পরিবর্তন করব না বলে প্রতিশ্রুতি দিয়েছি।" (যা বাই-ভ্যালু শব্দার্থের সাথে অত্যন্ত মিল)!