আমাকে বলা হয়েছে যে একটি হ্যান্ডেলটি একটি পয়েন্টার বাছাই করা, তবে তা নয় এবং এটি আপনাকে অবজেক্টের পরিবর্তে কোনও বস্তুর রেফারেন্স রাখতে দেয়। এর আরও বিস্তৃত ব্যাখ্যা কী?
আমাকে বলা হয়েছে যে একটি হ্যান্ডেলটি একটি পয়েন্টার বাছাই করা, তবে তা নয় এবং এটি আপনাকে অবজেক্টের পরিবর্তে কোনও বস্তুর রেফারেন্স রাখতে দেয়। এর আরও বিস্তৃত ব্যাখ্যা কী?
উত্তর:
একটি হ্যান্ডেল কোনও পূর্ণসংখ্য সূচক থেকে কার্নেল স্পেসের রিসোর্সে পয়েন্টার পর্যন্ত কিছু হতে পারে। ধারণাটি হ'ল তারা কোনও উত্সের বিমূর্ততা সরবরাহ করে, তাই এটি ব্যবহার করার জন্য আপনাকে উত্স সম্পর্কে নিজেই বেশি কিছু জানতে হবে না।
উদাহরণস্বরূপ, উইন 32 এপিআইএইচডাব্লুএনডি একটি উইন্ডোর হ্যান্ডেল। নিজেই এটি অকেজো: আপনি এ থেকে কোনও তথ্য সংগ্রহ করতে পারবেন না। তবে এটি ডান এপিআই কার্যক্রমে প্রেরণ করুন এবং আপনি এটির সাহায্যে বিভিন্ন কৌশল ব্যবহার করতে পারেন। অভ্যন্তরীণভাবে আপনি এইচডাব্লুএনডিটিকে জিইউআই এর উইন্ডোজের টেবিলের মধ্যে কেবল একটি সূচক হিসাবে ভাবতে পারেন (এটি সম্ভবত কীভাবে এটি বাস্তবায়িত হবে তা নয়, তবে এটি যাদুটিকে অর্থবোধ করে তোলে)।
সম্পাদনা: আপনি আপনার প্রশ্নে বিশেষত কী জিজ্ঞাসা করছেন তা 100% নির্দিষ্ট নয়। এটি মূলত খাঁটি সি / সি ++ এর কথা বলছে।
একটি হ্যান্ডেল একটি পয়েন্টার বা সূচক যা এর সাথে দৃশ্যমান প্রকারের সাথে সংযুক্ত নেই। সাধারণত আপনি কিছু দেখতে পাবেন:
typedef void* HANDLE;
HANDLE myHandleToSomething = CreateSomething();
সুতরাং আপনার কোডে আপনি কেবল একটি অস্বচ্ছ মান হিসাবে চারপাশে হ্যান্ডেলটি পাস করেন।
কোডটি যা অবজেক্টটি ব্যবহার করে, এটি পয়েন্টারটিকে একটি বাস্তব কাঠামোর প্রকারে কাস্ট করে এবং এটি ব্যবহার করে:
int doSomething(HANDLE s, int a, int b) {
Something* something = reinterpret_cast<Something*>(s);
return something->doit(a, b);
}
অথবা এটি এটি অ্যারে / ভেক্টরের সূচক হিসাবে ব্যবহার করে:
int doSomething(HANDLE s, int a, int b) {
int index = (int)s;
try {
Something& something = vecSomething[index];
return something.doit(a, b);
} catch (boundscheck& e) {
throw SomethingException(INVALID_HANDLE);
}
}
একটি হ্যান্ডেল হল এক ধরণের পয়েন্টার যা এটি সাধারণত কোনও সত্তাকে উল্লেখ করার একটি উপায়।
এটি বলা আরও সঠিক হবে যে পয়েন্টার হ্যান্ডেলগুলির এক প্রকারের, তবে সমস্ত হ্যান্ডলগুলি পয়েন্টার নয়।
উদাহরণস্বরূপ, একটি হ্যান্ডেল কোনও মেমরি টেবিলের মধ্যে কিছু সূচক হতে পারে, যা কোনও এন্ট্রির সাথে মিলিত হয় যা নিজেই কোনও বস্তুর পয়েন্টার ধারণ করে।
মূল কথাটি হ'ল যখন আপনার "হ্যান্ডেল" থাকে, আপনি জানেন না বা যত্নও করেননি যে সেই হ্যান্ডেলটি যে জিনিসটি সনাক্ত করে তা কীভাবে চিহ্নিত করা যায়, আপনার যা যা জানা দরকার তা হ'ল এটি does
এটিও স্পষ্ট হওয়া উচিত যে "হ্যান্ডেলটি আসলে কী" এর কোনও একক উত্তর নেই, কারণ একই জিনিসগুলিতে এমনকি বিভিন্ন জিনিসকে হ্যান্ডলগুলি "হুডের নীচে" বিভিন্নভাবে প্রয়োগ করা যেতে পারে। তবে আপনার এই পার্থক্যগুলির সাথে উদ্বিগ্ন হওয়ার দরকার নেই।
সি ++ / সিএলআই-তে, একটি হ্যান্ডেল হ'ল জিসি হিপে অবস্থিত কোনও বস্তুর পয়েন্টার। (পরিচালনা না করা) সি ++ হিপ ব্যবহার করে অর্জিত হয় new
এবং একটি new
এক্সপ্রেশনের ফলাফলটি একটি "সাধারণ" পয়েন্টার। একটি পরিচালিত অবজেক্টটি gcnew
এক্সপ্রেশন সহ জিসি (পরিচালিত) হিপগুলিতে বরাদ্দ করা হয় । ফলাফল হ্যান্ডেল হবে। আপনি হ্যান্ডলগুলিতে পয়েন্টার পাটিগণিত করতে পারবেন না। আপনি হ্যান্ডলগুলি মুক্ত করেন না। জিসি তাদের যত্ন নেবে। এছাড়াও, জিসি পরিচালিত হিপগুলিতে অবজেক্টগুলি স্থানান্তর করতে এবং প্রোগ্রামটি চলাকালীন নতুন অবস্থানগুলিতে নির্দেশ করার জন্য হ্যান্ডেলগুলি আপডেট করতে মুক্ত।
এটি হ্যান্ডেল-বডি- ইডিয়ামের প্রসঙ্গে উপস্থিত হয় , তাকে পিম্পল আইডিয়মও বলা হয়। এটি অন্য একটি শ্রেণীর অবজেক্টে প্রকৃত তথ্য রাখার মাধ্যমে একটি লাইব্রেরির এবিআই (বাইনারি ইন্টারফেস) একই রাখার অনুমতি দেয়, যা কেবল "হ্যান্ডেল" অবজেক্টে রাখা পয়েন্টার দ্বারা রেফারেন্স করা হয়, সেই শ্রেণীর প্রতিনিধিত্বকারী ফাংশনগুলির সমন্বয়ে " দেহ "।
এটি দুটি অবজেক্টের ধ্রুবক সময় এবং ব্যতিক্রম নিরাপদ অদলবদ সক্ষম করতেও কার্যকর। এর জন্য, কেবলমাত্র শরীরের বস্তুটির দিকে নির্দেশকারী পয়েন্টারটি অদলবদল করতে হবে।
একটি হ্যান্ডেল যা হ'ল তা হ'ল।
একটি হ্যান্ডেল কিছু সন্ধানের সারণীতে ব্যবহৃত স্বাক্ষরবিহীন পূর্ণসংখ্যা হতে পারে।
একটি হ্যান্ডেল ডেটার একটি বৃহত্তর সেট বা একটি মধ্যে পয়েন্টার হতে পারে।
এটি হ্যান্ডেলটি ব্যবহার করে এমন কোডটি কীভাবে আচরণ করে তার উপর নির্ভর করে। এটি হ্যান্ডেলের ধরণ নির্ধারণ করে।
' হ্যান্ডেল ' শব্দটি ব্যবহৃত হওয়ার কারণটি গুরুত্বপূর্ণ। এটি তাদের সনাক্তকরণ বা অ্যাক্সেসের ধরণের অবজেক্ট হিসাবে নির্দেশ করে। অর্থ, প্রোগ্রামারটির কাছে, তারা একটি 'কী' বা কিছুতে অ্যাক্সেসের প্রতিনিধিত্ব করে ।
HANDLE hnd;
এটার মতই void * ptr;
হ্যান্ডেল ভিজ্যুয়াল স্টুডিওতে (উইন্ডোজ) উইন্ট হ্যান্ড ফাইলের মধ্যে সংজ্ঞাযুক্ত একটি টাইপডেফ:
typedef void *HANDLE;
হ্যান্ডেল সম্পর্কে আরও পড়ুন