সি ++ এ কোনও ফাংশনের নামটি ইঙ্গিত করার আগে টিলড "~" কী করে?


136
 template <class T>
 class Stack
 {
 public:
    Stack(int = 10) ; 
    ~Stack() { delete [] stackPtr ; }  //<--- What does the "~" signify?
    int push(const T&); 
    int pop(T&) ;  
    int isEmpty()const { return top == -1 ; } 
    int isFull() const { return top == size - 1 ; } 
 private:
    int size ;  
    int top ;  
    T* stackPtr ;  
 } ;

উত্তর:


150

এটি ডেস্ট্রাক্টর, এটি উদাহরণটি ধ্বংস করে দেয়, স্মৃতিশক্তি মুক্ত করে ইত্যাদি ইত্যাদি

এখানে আইবিএম.কম থেকে একটি বিবরণ দেওয়া হয়েছে:

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

Https://www.ibm.com/support/ জ্ঞানসেন্টার/ en/ ssw_ibm_i_74/ rzarg/cplr380.htm দেখুন


1
এই লিঙ্কটি এখন ভেঙে গেছে।
zenofpython

2
@ জেনোফপিথন স্থির!
inanutshellus

75

অন্যরা যেমন উল্লেখ করেছে, উদাহরণস্বরূপ আপনি এটির সম্পর্কে জিজ্ঞাসা করছেন এটির জন্য ডেস্ট্রাক্টর class Stack

তবে আপনার প্রশ্নটি শিরোনামে প্রদর্শিত হবার মতো:

সি ++ এ কোনও ফাংশনের নামটি ইঙ্গিত করার আগে টিলড "~" কী করে?

আরও একটি পরিস্থিতি আছে। কোনও শ্রেণীর নামের সাথে সাথে (যা ধ্বংসাত্মক প্রসঙ্গ) এর ঠিক পূর্বের ব্যতীত অন্য কোনও প্রসঙ্গে ~হ'ল তার পরিপূরক (বা বিটওয়াইস নন) অপারেটর। এটি খুব ঘন ঘন আসে না তা নিশ্চিত হয়ে গেলেও আপনি এর মতো একটি ঘটনা কল্পনা করতে পারেন

if (~getMask()) { ...

যা দেখতে অনুরূপ, তবে এর খুব আলাদা অর্থ রয়েছে।


8

এটি একটি ধ্বংসকারী। যখন বস্তুটি সুযোগের বাইরে চলে যায় তখন ফাংশনটি কল করার নিশ্চয়তা দেয়।


2
... যদি এটি স্ট্যাকের উপর বরাদ্দ করা হয়। যখন 'মোছা' বস্তুটিতে কল করা হয় যদি এটি গাদাতে বরাদ্দ করা হয়।
ঝাড়িকো

@ ঝেরিকো: আসলে "মুছুন" শব্দটি ব্যবহৃত হয় তখনই। মনে রাখবেন কীওয়ার্ডটি "নতুন" "অপারেটরকে নতুন" ডাকে এবং তারপরে ঠিকানায় থাকা কনস্ট্রাক্টরকে কল দেয় যাতে স্ট্যাকের "নতুন" মেমরিটি একেবারে সম্ভব। :) "মুছুন" কীওয়ার্ডটি ডেস্ট্রাক্টরকে কল করে এবং তারপরে "অপারেটর ডিলিট" করে।
ট্রাব্বাদৌর

@ ঝেরিকো বা নামস্থান সুযোগে বাস করে বা স্থির শ্রেণীর সদস্য বা ফাংশন-স্থানীয় স্ট্যাটিক ভেরিয়েবল: স্থির স্টোরেজ সময়কাল। অন্য কথায়: অটম স্টোরেজ সহ সমস্ত বৈকল্পিক উপযুক্ত হলে স্বয়ংক্রিয়ভাবে ধ্বংস হয়ে যাবে। থেকে সাবধান স্ট্যাটিক সূচনা অর্ডার Fiasco
sehe

4

এটি একটি ধ্বংসকারী। যখন বস্তুটি ধ্বংস হয়ে যায় (জীবনের ক্ষেত্রের বাইরে বা মোছা হয়) তখন এটিকে বলা হয়।

পরিষ্কার হওয়ার জন্য, আপনাকে কনস্ট্রাক্টরের মতো ~ NameOfTheClass ব্যবহার করতে হবে, অন্যান্য নামগুলি অবৈধ।


2
"অন্যান্য নাম বৈধ"?
অরবিট

পুরানো উত্তর ... আমি মনে করি যে আমি বোঝাতে চেয়েছি after এর পরে এটি যে কোনও নাম হতে পারে যতক্ষণ এটি শ্রেণীর নাম এবং নির্মাতার নামের মতোই।
ক্লাইম

2

এটা ধ্বংসকারী। আপনার শ্রেণীর উদাহরণটি ধ্বংস হয়ে গেলে এই পদ্ধতিটি বলা হয়:

Stack<int> *stack= new Stack<int>;
//do something
delete stack; //<- destructor is called here;

1

এটি হবে ডেস্ট্রাক্টর (যে কোনও গতিশীল মেমরি মুক্ত করা)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.