সরান কার্যকলাপ (পদক্ষেপ কন্সট্রাকটর মত) জন্য std::shared_ptrহয় সস্তা তারা মূলত হয়, "চুরি পয়েন্টার" (গন্তব্যে উৎস থেকে আরও ভালো হবে, পুরো রাষ্ট্র নিয়ন্ত্রণ ব্লক গন্তব্যে উৎস থেকে "চুরি" হয়, রেফারেন্স গণনা তথ্য সহ) ।
পরিবর্তে কপি উপর অপারেশন std::shared_ptrডাকা পারমাণবিক (ঠিক না অর্থাত রেফারেন্স গণনা বৃদ্ধি ++RefCountএকটি পূর্ণসংখ্যা উপর RefCountতথ্য সদস্য, কিন্তু যেমন কলিং InterlockedIncrementWindows এ), যা বেশি ব্যয়বহুল মাত্র পয়েন্টার / রাজ্য চুরি হয়।
সুতরাং, বিশদে বিশদ হিসাবে এই মামলার রেফ গণনা গতিশীলতা বিশ্লেষণ:
// shared_ptr<CompilerInvocation> sp;
compilerInstance.setInvocation(sp);
আপনি যদি spমান দ্বারা পাস করেন এবং তারপরে পদ্ধতির ভিতরে একটি অনুলিপি নেন CompilerInstance::setInvocation, আপনার কাছে রয়েছে:
- পদ্ধতিতে প্রবেশ করার সময়,
shared_ptrপ্যারামিটারটি অনুলিপি নির্মিত হয়: রেফ কাউন্ট অ্যাটমিক ইনক্রিমেন্ট ।
- পদ্ধতির শরীরে ভিতরে, আপনি প্যারামিটারটি ডেটা মেম্বারে অনুলিপি করেন
shared_ptr: রেফ কাউন্ট অ্যাটমিক ইনক্রিমেন্ট ।
- পদ্ধতিটি থেকে বেরিয়ে আসার সময়,
shared_ptrপ্যারামিটারটি ধ্বংস হয়: রেফ কাউন্ট পারমাণবিক হ্রাস ।
মোট তিনটি পারমাণবিক ক্রিয়াকলাপের জন্য আপনার কাছে দুটি পরমাণু বৃদ্ধি এবং একটি পারমাণবিক হ্রাস রয়েছে ।
পরিবর্তে, যদি আপনি shared_ptrমান অনুসারে প্যারামিটারটি পাস করেন এবং তারপরে std::moveপদ্ধতির অভ্যন্তরে (যথাযথভাবে ক্ল্যাংয়ের কোডে করা হয়ে থাকে) আপনার কাছে রয়েছে:
- পদ্ধতিতে প্রবেশ করার সময়,
shared_ptrপ্যারামিটারটি অনুলিপি নির্মিত হয়: রেফ কাউন্ট অ্যাটমিক ইনক্রিমেন্ট ।
- পদ্ধতি লাশ ভিতরে, আপনি তথ্য সদস্য মধ্যে পরামিতি: সুত্র গণনা করে না পরিবর্তন! আপনি কেবল পয়েন্টার / রাষ্ট্র চুরি করছেন: কোনও ব্যয়বহুল পারমাণবিক রেফ কাউন্ট অপারেশন জড়িত নয়।
std::moveshared_ptr
- পদ্ধতিটি থেকে বেরিয়ে যাওয়ার সময়,
shared_ptrপ্যারামিটারটি ধ্বংস হয়; তবে যেহেতু আপনি দ্বিতীয় পদক্ষেপে চলে এসেছেন, তাই ধ্বংসকারী কিছুই নেই, কারণ shared_ptrপ্যারামিটারটি আর কোনও কিছুর দিকে ইশারা করছে না। আবার, এক্ষেত্রে কোনও পারমাণবিক হ্রাস ঘটে না।
নীচের লাইন: এক্ষেত্রে আপনি কেবলমাত্র একটি রেফ গণনা করুন পারমাণবিক বৃদ্ধি, অর্থাত্ কেবল একটি পারমাণবিক অপারেশন।
আপনি দেখতে পাচ্ছেন, অনুলিপি মামলার জন্য এটি দুটি পারমাণবিক বৃদ্ধি এবং একটি পারমাণবিক হ্রাস (মোট তিনটি পারমাণবিক ক্রিয়াকলাপের জন্য) চেয়ে অনেক ভাল ।