কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরের মধ্যে পার্থক্য

লেখক: Laura McKinney
সৃষ্টির তারিখ: 1 এপ্রিল 2021
আপডেটের তারিখ: 10 মে 2024
Anonim
কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরের মধ্যে পার্থক্য - প্রযুক্তি
কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরের মধ্যে পার্থক্য - প্রযুক্তি

কন্টেন্ট


কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর তাদের ক্লাসের মতো একই নামে সদস্য ফাংশন। আগের টাইপ নির্মাতা কোনও বস্তুর সূচনাতে সহায়তা করে। বিপরীতে, ক বিনাশকারী কনস্ট্রাক্টর থেকে পৃথক যা এটি যখন কোনও কাজে আসে না তখন তৈরি কন্সট্রাক্টরকে মুছে দেয়।

কখনও কখনও এটি ব্যবহারের আগে কোনও বস্তুর কিছু অংশ শুরু করার প্রয়োজন হয়। উদাহরণস্বরূপ, আমরা স্ট্যাকের উপর অপারেটিং করছি, কোনও পদক্ষেপ নেওয়ার আগে, স্ট্যাকের শীর্ষটি সর্বদা শূন্যতে সেট করা উচিত। স্বয়ংক্রিয় সূচনার এই বৈশিষ্ট্যটি ‘কনস্ট্রাক্টর’ এর মাধ্যমে সম্পাদিত হয়। পছন্দ করুন, যদি কোনও বস্তুর কিছু ধ্বংস হওয়ার আগে কিছু কোড চালানো দরকার। উদাহরণস্বরূপ, যদি কোনও বস্তুর এটির আগে তার খোলার একটি ফাইলটি বন্ধ করার দরকার হয়। এটি ‘ধ্বংসকারী’ এর সাহায্যে সঞ্চালিত হতে পারে।

আসুন তুলনামূলক চার্টের সাহায্যে কনস্ট্রাক্টর এবং ডেস্ট্রাক্টরের মধ্যে কিছু মৌলিক পার্থক্যকে পর্যালোচনা করি

  1. তুলনা রেখাচিত্র
  2. সংজ্ঞা
  3. মূল পার্থক্য
  4. উপসংহার

তুলনা রেখাচিত্র:

তুলনার জন্য ভিত্তিনির্মাতাবিনাশকারী
উদ্দেশ্য

এটি কোনও বস্তুকে স্মৃতি বরাদ্দ করে।এটি কোনও বস্তুর স্মৃতি ক্ষয় করে।
ঘোষণা শ্রেণি_নাম (যদি আর্গুমেন্ট থাকে) {};~ শ্রেণি_নাম (কোন যুক্তি নেই) {};
আর্গুমেন্ট কনস্ট্রাক্টর যুক্তি গ্রহণ করে ধ্বংসকারী কোনও যুক্তি গ্রহণ করে না।
কল করা হচ্ছেকনস্ট্রাক্টরকে স্বয়ংক্রিয়ভাবে বলা হয়, যখন অবজেক্টটি তৈরি হয়।ব্লকটি প্রস্থান করা বা প্রোগ্রামের সমাপ্তির সাথে সাথে ডেস্ট্রাক্টরকে স্বয়ংক্রিয়ভাবে ডাকা হয়।
ওয়ার্কিংকনস্ট্রাক্টর একটি বস্তুকে এর মানটির কিছুটা আগে শুরু করার অনুমতি দেয়, এটি ব্যবহৃত হয়।ডেস্ট্রাক্টর একটি বস্তুকে তার ধ্বংসের সময় কিছু কোড চালানোর অনুমতি দেয়।
মৃত্যুদণ্ড কার্যকর করার আদেশ

কনস্ট্রাক্টরকে ধারাবাহিক ক্রমে ডাকা হয়।
কনস্ট্রাক্টরের বিপরীত ক্রমে ডাস্ট্রাক্টর বলা হয়।
সংখ্যায় একটি ক্লাসে একাধিক কনস্ট্রাক্টর থাকতে পারে।ক্লাসে সর্বদা একক ডেস্ট্রাস্টার থাকে।
অনুলিপি নির্মাণকারী অনুলিপি কনস্ট্রাক্টর একটি কনস্ট্রাক্টরকে অন্য অবজেক্ট থেকে কোনও অবজেক্ট ডিক্লেয়ার এবং আরম্ভ করার অনুমতি দেয়।এরকম কোনও ধারণা নেই।
ওভার লোডিং কনস্ট্রাক্টরদের ওভারলোড করা যায়।ধ্বংসকারীকে ওভারলোড করা যায় না।


কনস্ট্রাক্টর সংজ্ঞা:

একজন নির্মাতা মূলত শ্রেণীর একটি সদস্য ফাংশন, যা বস্তুটি আরম্ভ করে এবং এতে মেমরি বরাদ্দ করে। নির্মাতারা ক্লাসের মতো একই নাম দিয়ে ঘোষিত ও সংজ্ঞায়িত হওয়ায় সহজেই তাদের চিহ্নিত করা যায়। একজন কনস্ট্রাক্টরের কোনও রিটার্ন টাইপ থাকে না; সুতরাং, তারা কোনও কিছু ফিরিয়ে দেয় না, এমনকি 'অকার্যকর' করে না। একজন কনস্ট্রাক্টর সর্বদা শ্রেণীর সর্বজনীন বিভাগে সংজ্ঞায়িত হয়।

একটি ক্লাসে একাধিক কনস্ট্রাক্টর থাকতে পারে; পাস করা আর্গুমেন্টের সংখ্যা এবং ধরণের ভিত্তিতে তাদের আলাদা করা যায়। যদি একটি ক্লাসে একাধিক কনস্ট্রাক্টর থাকে; প্রকৃত কনস্ট্রাক্টর (করণীয় কিছুই নয়) তাদের সাথে সংজ্ঞায়িত করতে হবে; এটি ছাড়া কিছুই করে না, সংকলককে সন্তুষ্ট করে।

কনস্ট্রাক্টরগুলি ডিফল্ট আর্গুমেন্টের সাহায্যে সংজ্ঞায়িতও করা যায়। অন্যদিকে, তারা বস্তুটি "গতিশীল" হিসাবে আরম্ভ করে। কনস্ট্রাক্টররা উত্তরাধিকার সূত্রে প্রাপ্ত হতে পারে না, এটি ভার্চুয়ালও হতে পারে তবে সেগুলি ওভারলোড করা যায়। তাদের ঠিকানায় উল্লেখ করা যায় না।


কনস্ট্রাক্টর এর প্রকার

মূলত তিন ধরণের কনস্ট্রাক্টর রয়েছে- ডিফল্ট, প্যারামিটারাইজড এবং কপি কনস্ট্রাক্টর।

  • ডিফল্ট নির্মাতা: এটি এমন একটি নির্মাণকারী যেখানে কনস্ট্রাক্টরকে কোনও যুক্তি দেওয়া হয় না। ডিফল্ট কনস্ট্রাক্টরের কোনও প্যারামিটার থাকে না, তবে ডিফল্ট কনস্ট্রাক্টরের মানগুলি ডিফল্টরূপে (গতিশীল) পাস করা যায়।
  • প্যারামিটারাইজড কনস্ট্রাক্টর: এই ধরণের কনস্ট্রাক্টর আর্গুমেন্ট গ্রহণ করে; আমরা ডেটা মেম্বারকে বিভিন্ন মানকে আর্গুমেন্ট হিসাবে পাস করতে পারি।
  • অনুলিপি নির্মাণকারী: অনুলিপি কনস্ট্রাক্টর অন্যান্য ধরণের কনস্ট্রাক্টর থেকে আলাদা কারণ এটি অন্য বস্তুর ঠিকানাটি আর্গুমেন্ট হিসাবে গ্রহণ করে।

নির্মাণকারীর বাস্তবায়ন:

বর্গ কনস্ট্যান্ট ইন, বি; সর্বজনীন: কনস্ট () // কোনও প্যারামিটার সহ কনস্ট্রাক্টর {a = 0; খ = 0; } কনস্ট (ইন সি, ইন্ট ডি) {// প্যারামিটার সহ কন্সট্রাক্টর a = সি; গ = D; }}; int main () {কনস্ট সি 1; C2 এ (10,20); // এই বিবৃতিটি নির্মাণকারীকে প্রার্থনা করে}

সি 1 যখন কোনও প্যারামিটার না দিয়ে একটি কনস্ট্রাক্টর তৈরি করা হয় তখন সি 1 কোনও পরামিতি পাস করে না। যেখানে সি 2 যখন প্যারামিটার সহ একটি কনস্ট্রাক্টর তৈরি করা হয় তখন এটি কার্যকর হয়, কারণ এটি কনস্ট্রাক্টরের দুটি সংখ্যার পূর্ণসংখ্যা পাঠিয়ে দেয়।

ধ্বংসকারী সংজ্ঞা:

একজন বিনাশকারী এছাড়াও একটি শ্রেণীর সদস্য ফাংশন, যা কোনও অবজেক্টে বরাদ্দকৃত স্মৃতিটিকে ক্ষুণ্ন করে। এটি ক্লাসের একই নামের সাথে সংজ্ঞায়িত করা হয়, এর আগে ক টিল্ড (~) প্রতীক। কনস্ট্রাক্টরের বিপরীত ক্রমে সর্বদা ডেস্ট্রাক্টরদের ডাকা হয়।

কোনও শ্রেণিতে সর্বদা একক ডেস্ট্রাস্টার থাকে, কারণ এটি কোনও যুক্তি গ্রহণ করে না। স্থানীয় বস্তুগুলি নির্বাহের নিয়ন্ত্রণ অবরুদ্ধ হওয়ার সাথে সাথে ধ্বংস হয়ে যায়; অন্যদিকে, পুরো প্রোগ্রামটি শেষ হয়ে গেলে বিশ্বব্যাপী অবজেক্টগুলি ধ্বংস হয়ে যায়। একজন ডেস্ট্রাক্টর স্পষ্টভাবে একটি সংকলক দ্বারা ডাকা হয়। যদি ক্লাসগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয়, এবং একটি ক্লাস পিতামাতা বর্গ থেকে উত্পন্ন হয়, এবং শিশু শ্রেণি এবং পিতামাতাদের উভয় শ্রেণীরই ডেস্ট্রাক্টর থাকে; তারপরে, উত্পন্ন শ্রেণীর ডেস্ট্রাক্টরকে প্রথমে বলা হয়, তারপরে পিতামাতার শ্রেণীর ডেস্ট্রাক্টর।

ধ্বংসকারী বাস্তবায়ন:

বর্গ কনস্ট্যান্ট ইন, বি; সর্বজনীন: কনস্টেম (int c, int d) // পরামিতি সহ নির্মাণকারী। {ক = গ; গ = D; cout << "a এবং b এর মান" <<>

যখন C1 অবজেক্ট তৈরি করা হবে, পূর্ণসংখ্যার ধরণের দুটি পরামিতি সহ একটি কনস্ট্রাক্টর আহ্বান করা হবে এবং সদস্য "ক, খ" আরম্ভ হবে এবং "ক, খ" এর মানটি এড হবে। এর পরে ডেস্ট্রাক্টর আহ্বান জানায় এবং "অবজেক্ট সি 1 নষ্ট হয়ে যায়"।

ধ্বংসকারী প্রয়োজন

কনস্ট্রাক্টর তৈরির ফলে কিছু পরিমাণ মেমরি স্পেস খরচ হয়, কারণ এটি শেষ পর্যন্ত বস্তুগুলিকে মেমরি বরাদ্দ করে। অন্যান্য কাজের জন্য সংস্থানগুলি মুক্ত করার জন্য এই বরাদ্দ হওয়া মেমরিটি অবশ্যই অবনতি করতে হবে de ডেস্ট্রাক্টরগুলি উদ্দেশ্যযুক্ত উদ্দেশ্যে অত্যন্ত কার্যকর, যা কার্যকরভাবে বস্তুগুলিকে ধ্বংস করে এবং মেমরিটি মুক্ত করার জন্য ক্লিন-আপ কার্য সম্পাদন করে।

  1. কনস্ট্রাক্টরের প্রাথমিক উদ্দেশ্য হ'ল বস্তুগুলি তৈরি হওয়ার সময় তাদের কাছে মেমরি বরাদ্দ করা। বিপরীতে, ডেস্ট্রাক্টরের মূল উদ্দেশ্য হ'ল অবজেক্টটির স্মৃতিশক্তি নষ্ট হয়ে গেলে তা হ্রাস করা।
  2. কোনও কনস্ট্রাক্টরকে আর্গুমেন্টগুলি গ্রহণ করার অনুমতি দেওয়া হয় কারণ আর্গুমেন্টগুলি শ্রেণীর ডেটা সদস্যদের শুরু করতে ব্যবহৃত হতে পারে। অন্যদিকে, কোনও ধ্বংসকারী কোনও যুক্তি গ্রহণ করে না কারণ এর একমাত্র কাজ হ'ল বস্তুর স্মৃতিশক্তি হ্রাস করা।
  3. একটি অবজেক্ট তৈরি করা হলে কনস্ট্রাক্টরকে ডাকা হয়। বিপরীতে, যখন কোনও প্রোগ্রামটি সমাপ্ত হয় বা প্রোগ্রামটি সেই ব্লক থেকে বের হয় যেখানে কোনও অবজেক্ট তৈরি করা হয় তখন একজন ডেস্ট্রাক্টরকে ডাকা হয়।
  4. কোনও কনস্ট্রাক্টর সাধারণত শ্রেণীর ডেটা মেম্বারদের আরম্ভ করার জন্য ব্যবহৃত হয়, অন্যদিকে ডেস্ট্রাক্টর অবজেক্টটিকে ধ্বংস হওয়ার আগে কিছু ক্রিয়াকলাপ করতে দেয়।
  5. কনস্ট্রাক্টরগুলি ধারাবাহিক ক্রমে মৃত্যুদন্ড কার্যকর করা হয় যার অর্থ যদি এমন কোনও উদ্ভূত শ্রেণি থাকে যা বেস শ্রেণীর উত্তরাধিকার সূত্রে প্রাপ্ত হয় এবং উদ্ভূত শ্রেণীর অবজেক্টটি তৈরি হয় তবে এটি প্রথমে বেস বর্গের কনস্ট্রাক্টর এবং তারপরে উত্পন্ন শ্রেণীর কনস্ট্রাক্টরকে কল করবে। বিপরীতভাবে, উত্পন্ন শ্রেণীর ডেস্ট্রাক্টরকে প্রথমে বলা হয় এবং তারপরে বেস শ্রেণীর অর্থ এটি হয় যে একজন ডেস্ট্রাক্টর নির্মাতার বিপরীত ক্রমে কার্যকর করা হয়।
  6. ক্লাসে, একাধিক কনস্ট্রাক্টর থাকতে পারে যা পাস সংখ্যাটি আর্গুমেন্ট দ্বারা চিহ্নিত করা যায় তবে এতে কেবলমাত্র একজন ডেস্ট্রাক্টর থাকতে পারে।
  7. অনুলিপি নির্মাণকারীর একটি ধারণা রয়েছে যা কোনও বস্তুকে অন্য কোনও বস্তু থেকে আরম্ভ করার অনুমতি দেয় যখন ডেস্ট্রাক্টরের কোনও ধারণা নেই।
  8. একই নির্মাণকারীর নামে বিভিন্ন ক্রিয়া সম্পাদনের জন্য কনস্ট্রাক্টরগুলি ওভারলোড হতে পারে। বিপরীতে, ধ্বংসকারীদের ওভারলোড করা যাবে না।

উপসংহার:

সাদৃশ্য ছাড়াও, সেই কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর একটি শ্রেণীর বিশেষ সদস্য ফাংশন এবং একই নামের অধিকারী, উভয়ের মধ্যে অপরিহার্য পার্থক্য হ'ল, 'কন্সট্রাক্টর' স্মৃতি বরাদ্দের সময় এবং ডাস্ট্রাক্টরকে ডেকে আনা হয় অবজেক্টের মেমরি অবলম্বনের সময়। কনস্ট্রাক্টর এবং ডেস্ট্রাক্টর উভয়ই ক্লাসে সংজ্ঞায়িত না হলেও সংকলক দ্বারা সুস্পষ্টভাবে ডাকা হয়।