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