ইন c++03
এটা কোনো প্রভাব নেই যে একটি নাল পয়েন্টার মোছার চমত্কার স্পষ্ট। প্রকৃতপক্ষে, এতে স্পষ্টভাবে বলা হয়েছে §5.3.5/2
:
যে কোনও বিকল্পে, মুছার অপারেন্ডের মান যদি নাল পয়েন্টার হয় তবে ক্রিয়াকলাপের কোনও প্রভাব নেই।
তবে এই খণ্ডটির জন্য বর্তমান খসড়াটিc++0x
অনুপস্থিত বলে মনে হচ্ছে। খসড়াটির বাকী অংশে আমি কেবল বাক্যগুলি খুঁজে পেতাম যেখানে মুছে ফেলুন-এক্সপ্রেশনটির অপারেন্ড নাল পয়েন্টার ধ্রুবক না হলে কী ঘটে ating নাল পয়েন্টার মুছে ফেলা এখনও সংজ্ঞায়িত করা হয় c++0x
, এবং যদি তাই হয়, কোথায়?
মন্তব্য:
এটি এখনও ভালভাবে সংজ্ঞায়িত করা হয়েছে এমন পরামর্শ দেওয়ার জন্য উল্লেখযোগ্য পরিস্থিতিগত প্রমাণ রয়েছে।
প্রথমত, এখানে §5.3.5/2
উল্লেখ করে দুটি বাক্য রয়েছে
প্রথম বিকল্পে (মুছে ফেলুন অবজেক্ট), অপসারণের অপারেন্ডের মান একটি নাল পয়েন্টার মান হতে পারে, ...
এবং
দ্বিতীয় বিকল্পে (অ্যারে মুছুন) মুছতে অপারেন্ডের মান একটি নাল পয়েন্টার মান বা ...
এগুলি বলে যে অপারেন্ডটি নাল হতে দেওয়া হয়, তবে তাদের নিজের থেকে আসলে কী হয় তা নির্ধারণ করে না।
দ্বিতীয়ত, এর অর্থ পরিবর্তন delete 0
করা একটি বড় ব্রেকিং পরিবর্তন, এবং মান কমিটি খুব সম্ভবত এই বিশেষ পরিবর্তন করতে পারে। তদুপরি c++0x
খসড়াটির সামঞ্জস্যতা এনেক্স (আনেক্সেক্স সি) এর এটি একটি ব্রেকিং পরিবর্তন বলে উল্লেখ নেই । আনেক্সেক্স সি অবশ্য একটি তথ্যবহুল বিভাগ, সুতরাং এটির মানটির কোনও ব্যাখ্যা নেই।
অন্যদিকে, নাল পয়েন্টারটি মুছে ফেলার কোনও প্রভাব ফেলতে হবে না এই বিষয়টি অতিরিক্ত রান-টাইম চেককে বোঝায়। প্রচুর কোডে অপারেন্ড কখনই শূন্য হতে পারে না, সুতরাং এই রানটাইম চেকটি শূন্য ওভারহেড নীতিটির সাথে বিরোধী। হয়তো কমিটি কেবল ভাষার বর্ণিত নকশার লক্ষ্যগুলির সাথে সামঞ্জস্য রেখে স্ট্যান্ডার্ড সি ++ আরও আনার জন্য আচরণটি পরিবর্তন করার সিদ্ধান্ত নিয়েছে।