কিছু আমাকে বিরক্ত করে:
MyClass& operator=(const MyClass& other)
{
MyClass tmp(other);
swap(tmp);
return *this;
}
প্রথমত, যখন আমার মন "অনুলিপি" ভাবছে তখন "অদলবদল" শব্দটি পড়লে আমার সাধারণ জ্ঞানটি বিরক্ত হয়। এছাড়াও, আমি এই অভিনব কৌশলটির লক্ষ্য নিয়ে প্রশ্ন করি। হ্যাঁ, নতুন (অনুলিপি করা) সংস্থানগুলি তৈরির ক্ষেত্রে ব্যতিক্রমগুলি সোয়াপ হওয়ার আগেই হওয়া উচিত যা এটি নিরাপদ উপায়ে মনে হয় যেন এটি নতুনভাবে লাইভ করার আগে সমস্ত ডেটা পূরণ করা হয়।
সেটা ঠিক আছে. সুতরাং, অদলবদলের পরে ঘটে যাওয়া ব্যতিক্রমগুলি সম্পর্কে কী বলা যায়? (যখন অস্থায়ী বস্তুটি সুযোগের বাইরে চলে যায় তখন পুরানো সংস্থানগুলি ধ্বংস হয়ে যায়) কার্যভারের ব্যবহারকারীর দৃষ্টিকোণ থেকে, অপারেশনটি ব্যর্থ হয়েছে, ব্যতীত এটি। এটির একটি বিশাল পার্শ্ব প্রতিক্রিয়া রয়েছে: অনুলিপিটি আসলে ঘটেছিল। এটি কেবলমাত্র কিছু সংস্থান সাফাই ব্যর্থ হয়েছিল। বাইরে থেকে অপারেশন ব্যর্থ হয়েছে বলে মনে হলেও গন্তব্য অবজেক্টের অবস্থার পরিবর্তন করা হয়েছে।
সুতরাং, আমি আরও কিছু প্রাকৃতিক "স্থানান্তর" করার জন্য "অদলবদলের" পরিবর্তে প্রস্তাব দিই:
MyClass& operator=(const MyClass& other)
{
MyClass tmp(other);
transfer(tmp);
return *this;
}
অস্থায়ী অবজেক্টটির এখনও নির্মাণ রয়েছে, তবে পরবর্তী তাত্ক্ষণিক ক্রিয়া হ'ল গন্তব্যের সমস্ত বর্তমান সংস্থানগুলি সরিয়ে নেওয়ার আগে (এবং NULLing যাতে তারা দ্বিগুণ-মুক্ত হবে না) উত্সটির উত্সগুলি সরবরাহ করা।
{কনস্ট্রাক্ট, মুভ, ডিসস্ট্রাক্ট Instead এর পরিবর্তে আমি প্রস্তাব করছি} নির্মাণ, ধ্বংস করা, সরানো} এই পদক্ষেপটি, যা সর্বাধিক বিপজ্জনক পদক্ষেপ, সমস্ত কিছু নিষ্পত্তি হওয়ার পরে সর্বশেষ গৃহীত হয়েছে।
হ্যাঁ, ধ্বংস ব্যর্থতা উভয় প্রকল্পেই সমস্যা। ডেটা হয় দুর্নীতিগ্রস্থ হয়েছে (যখন আপনি এটি ভাবেননি এটি অনুলিপি করা হয়েছে) বা হারিয়ে গেছে (যখন আপনি এটি মনে করেননি তখন মুক্ত হন)। হারানো কলুষিত চেয়ে ভাল। কোনও ডেটা খারাপ ডেটার চেয়ে ভাল হয় না।
অদলবদলের পরিবর্তে স্থানান্তর করুন। এটা যাইহোক আমার পরামর্শ।