auto a = new int[0];
[বেসাম.কম.পাউন্ড ৩.] এর মতে , সঞ্চিত মানটি a
নিম্নলিখিতগুলির মধ্যে একটি হতে হবে:
- একটি বস্তুর পয়েন্টার (টাইপ
int
)
- একটি অবজেক্টের শেষের দিকের পয়েন্টার
- খালি
- অকার্যকর
int
নির্মাণের ধরণের কোনও অবজেক্ট না থাকায় আমরা প্রথম সম্ভাবনাটি বাতিল করতে পারি । তৃতীয় সম্ভাবনাটি বাতিল করা হয়েছে যেহেতু সি ++ এর জন্য একটি নন-নাল পয়েন্টারটি ফেরত পাঠানো দরকার (দেখুন [বেসিক.এসটিসি.ডিনামিক.এলোকেশন ২]] )। সুতরাং আমরা দুটি সম্ভাবনা রেখেছি: একটি অবজেক্টের শেষ পয়েন্টার বা একটি অবৈধ পয়েন্টার।
আমি a
একটি অতীত-শেষ পয়েন্টার হিসাবে দেখার ঝোঁক হব, তবে এটিকে নিশ্চিতভাবে প্রতিষ্ঠিত করার জন্য আমার কাছে কোনও নামী রেফারেন্স নেই। (যদিও [বেসিক.এসটিসি] এ এটির একটি দৃlic় ধারণা রয়েছে , আপনি কীভাবে delete
এই পয়েন্টারটি করতে পারেন তা দেখে )) সুতরাং আমি এই উত্তরে উভয় সম্ভাবনা উপভোগ করব।
অনুলিপি আরম্ভের অনুলিপি মধ্যে আপনি কি পয়েন্টারটি পড়তে পারবেন a + 1
?
[অপারেটর ৪.৪] দ্বারা নির্ধারিত আচরণটি অপরিজ্ঞাত , উপরের যে সম্ভাবনাটি তা প্রয়োগ না করেই।
যদি a
একটি অতীত-শেষ পয়েন্টার হয়, তবে এটি 0
কোনও উপাদান ছাড়াই একটি অ্যারের সূচকে অনুমানীয় উপাদানটিকে নির্দেশ করে বলে মনে করা হয় । পূর্ণসংখ্যা যোগ করার পদ্ধতি j
থেকে a
সংজ্ঞায়িত করা হয় শুধুমাত্র যখন 0≤0+j≤n
, যেখানে n
অ্যারের আকার। আমাদের ক্ষেত্রে, n
শূন্য, সুতরাং যোগফল a+j
কেবল তখনই সংজ্ঞায়িত j
হয় 0
। বিশেষত, সংযোজন 1
অপরিজ্ঞাত।
যদি a
অবৈধ হয়, তবে আমরা পরিষ্কারভাবে "অন্যথায়, আচরণটি সংজ্ঞায়িত হয়" তে পড়ে যাই। (অবাক হওয়ার মতো বিষয় নয় যে সংজ্ঞায়িত সংস্থাগুলি কেবল বৈধ পয়েন্টার মানকে আচ্ছাদন করে))
তদ্ব্যতীত, ভাষা কি সংকলকটিতে সেট a
করার অনুমতি দেয় nullptr
?
থেকে নং উল্লিখিত [basic.stc.dynamic.allocation.2] : "অনুরোধ সফল হলে, একটি পরিবর্তনযোগ্য বরাদ্দ ফাংশন দ্বারা ফেরত মূল্য অ নাল পয়েন্টার মান হল" । রয়েছে একটি পাদটীকা খুঁজে কলিং যে সি ++ (কিন্তু সি) একটি শূন্য অনুরোধ প্রতিক্রিয়ায় একটি অ নাল পয়েন্টার প্রয়োজন।
a
নিশ্চিতভাবে পড়তে পারেন (আপনি অবশ্যই এটি অবচয় করতে পারবেন না)।