এর বৈধতা অনুসারে delete this
, নতুন স্থাপনার this
অনুমতি দেওয়া পর্যন্ত আমি জানি। এছাড়াও, this
বা অন্যান্য পূর্ব-বিদ্যমান পয়েন্টার / রেফারেন্সগুলি পরে ব্যবহার করা যেতে পারে সে সম্পর্কিত, কয়েকটি বিধিনিষেধ রয়েছে:
[Basic.life]
যদি কোনও অবজেক্টের জীবদ্দশায় শেষ হয়ে যাওয়ার পরে এবং যে স্টোরেজটি দখলকৃত বস্তুটি পুনরায় ব্যবহার বা মুক্তি দেওয়া হয় তার আগে, কোনও নতুন অবজেক্টটি স্টোরেজ অবস্থানে তৈরি করা হয় যা আসল বস্তুটি দখল করে, একটি পয়েন্টার যা মূল বস্তুকে নির্দেশ করে, একটি রেফারেন্স মূল অবজেক্টের সাথে উল্লেখ করা হয়, বা মূল অবজেক্টের নাম স্বয়ংক্রিয়ভাবে নতুন বস্তুর উল্লেখ করবে এবং একবার নতুন অবজেক্টটির জীবনকাল শুরু হয়ে গেলে নতুন অবজেক্টটি ম্যানিপুলেট করতে ব্যবহার করা যেতে পারে, যদি:
- নতুন অবজেক্টের জন্য সঞ্চয়স্থান হ'ল স্টোরেজ অবস্থানটি ওভারলে করে যা মূল বস্তুটি দখল করে এবং
- নতুন অবজেক্টটি মূল ধরণের (শীর্ষ স্তরের সিভি-কোয়ালিফায়ারকে উপেক্ষা করে) এবং একই ধরণের
- মূল অবজেক্টের ধরণটি কনস্ট-কোয়ালিটিড নয়, এবং, যদি কোনও শ্রেণীর ধরণ থাকে তবে এমন কোনও অ স্থিতিশীল ডেটা সদস্য না থাকে যার প্রকারটি কনস্ট-কোয়ালিফাইড বা রেফারেন্স টাইপ, এবং
- মূল অবজেক্ট বা নতুন বস্তুটিই কোনও সম্ভাব্য-ওভারল্যাপিং সাবোবজেক্ট নয় ([অন্তঃব্যবজেক্ট])।
প্রথম দুটি এই উদাহরণে সন্তুষ্ট, তবে শেষ দুটি বিবেচনায় নেওয়া দরকার।
তৃতীয় পয়েন্টটি সম্পর্কে, ফাংশনটি নন-কনস্টিটেড-কোয়ালিটিযুক্ত, এটি ধরে নেওয়া মোটামুটি নিরাপদ হওয়া উচিত যে আসল অবজেক্টটি অবিচ্ছিন্ন is যদি দৃ the়তা দূরে ফেলে দেওয়া হয় তবে দোষটি কলারের দিকে থাকে। কনস্ট / রেফারেন্স সদস্য সম্পর্কে, আমি মনে করি যে এটি নির্ধারিত বলে জোর করে পরীক্ষা করা যায়:
static_assert(std::is_trivial_v<A> && std::is_copy_assignable_v<A>);
অবশ্যই, যেহেতু অ্যাসিনেবিলিটি হ'ল একটি প্রয়োজনীয়তা, আপনি কেবল তার পরিবর্তে কেবল *this = {};
একই প্রোগ্রামটি তৈরির প্রত্যাশা করতে পারেন। সম্ভবত আরও আকর্ষণীয় ব্যবহারের ক্ষেত্রে *this
অন্য ধরণের কোনও অবজেক্টের স্মৃতি পুনঃব্যবহার করা হতে পারে (যা ব্যবহারের প্রয়োজনীয়তাগুলিকে ব্যর্থ করবে this
, কমপক্ষে পুনরায় ব্যাখ্যা না করে)।
এর অনুরূপ delete this
, নতুন this
স্থাপনাটি খুব সম্ভবতই "নিরাপদ" হিসাবে বর্ণিত হতে পারে।