Constructor and Destructor in C++

Constructor and Destructor in C++: अभी तक हमने काफी Classes को देखा। सभी में Value Initialization के लिए हमने Member Functions का प्रयोग किया है। जैसे कि e1.input() Statement से input() Member Function द्वारा Object e1 में मान प्रदान किया जाता है। ठीक इसी प्रकार से x.getdata(100, 10.2); Statement द्वारा Data Member में मान Initialize किया है। ये सभी Member Function ये सुविधा नहीं देते हैं कि हम किसी भी Object को Declare करते समय ही उसमें मान Initialize कर सकें] जैसाकि Built-in Data Type के Variables के साथ हम कर सकते हैं। यानी यदि हम चाहें कि int x = 10; Statement की तरह ही हम किसी Object को भी उसके Declaration के समय ही मान Initialize कर दें, तो हम Objects के साथ इन सामान्‍य Function द्वारा ये काम नहीं कर सकते हैं।

किसी Class के Objects के Declaration के समय ही उसमें मान Initialize करने के लिए हमें “C++” में विशेष प्रकार के Function का प्रयोग करना पडता है, जिसे Constructors कहा जाता है। यानी Constructor एक ऐसा Member Function होता है, जो किसी Object को Create करते ही उसे Initialize करने का काम करता है। इस Function के कारण हम जैसे ही किसी Class का कोई Object Declare करते हैं, तो Object के Memory में जगह लेते ही उसमें कुछ मान Automatically Initialize हो जाते हैं।

इसी तरह से जब हम कोई Standard Data Type का Variable Declare करते हैं, तो Program या Function के समाप्त होते ही, उस Variable द्वारा ली गई Memory Space स्वयं ही Release हो जाती है। जबकि Objects के साथ ऐसा नहीं होता है। Objects द्वारा ली गई Memory को Release करने के लिए एक अन्‍य Special Function को Use करना पडता है। इस Special Function को Destructor कहा जाता है।

पिछले अध्‍यायों में हमने किसी Object को Initialize करने के लिए एक init() Function को Use किया है। इस Function के साथ परेशानी ये है कि जब भी हम कोई Object Create करते हैं, हमें इस Function को उस Object के Reference में Call करके Object को Initialize करना पडता है।

इस असुविधा से बचने के लिए “C++” में इस विशेष प्रकार के Member Function की व्‍यवस्था की गई है। हम किसी Class में Constructor Function Create करें या ना करें, लेकिन जब भी हम किसी Class का कोई Object Declare करते हैं, Compiler उस Object को Create करता है, Object को Memory Allocate करता है और विभिन्न प्रकार के आवश्‍यक Initializations करता है। ये सभी काम Automatically होते हैं, ठीक उसी प्रकार से जिस प्रकार से Basic Data Type के Variables के साथ होता है।

जब हम कोई Variable Declare करते हैं, तो Compiler Program की शुरूआत में उस Variable को Create करता है और Program के समाप्त होने पर उस Variable की Memory को Release भी कर देता है।

लेकिन जब हम कोई Object Create करते हैं, उसकी Memory को Release करने के लिए भी हमें एक Member Function लिखना पडता है। इस Member Function को Destructor कहते हैं और जब कोई Object Destroy हो रहा होता है, तब Constructor Member Function की तरह ही ये Destructor Member Function भी Automatically Call हो जाता है।

Constructor की तरह ही Programmer किसी Object की Memory को Release करने के लिए चाहे Destructor Function लिखे चाहे ना लिखे, Compiler एक Routine द्वारा Object की Memory को Release कर देता है। आईए, हम एक Program द्वारा Constructor व Destructor को समझते हैं

// Program
#include <iostream.h>
#include <conio.h>

class ConstNDestDemo
{
	public:
		ConstNDestDemo(void) 	//Constructor
		{
			cout << "\n Constructor Called Automatically ";
		}

		~ ConstNDestDemo()	//Destructor
		{
			cout << "\n Destructors Called Automatically ";
		}
};

void main()
{
	cout << "\n Starting main() Function " <<endl ;
	ConstNDestDemo first;
	ConstNDestDemo second ;
	ConstNDestDemo third;
	cout << "\n Ending main() Function ";
	getch();
}

// Output
  Starting main() Function 

    Constructor Called Automatically
    Constructor Called Automatically
    Constructor Called Automatically

  Ending main() Function

    Destructors Called Automatically
    Destructors Called Automatically
    Destructors Called Automatically

एक Constructor व Destructor का नाम व Class का नाम दोनों नाम हमेंशा एक समान होते हैं, जैसाकि हम उपरोक्त उदाहरण में देख सकते हैं। Constructor व Destructor दोनों के नामों में बस इतना ही अन्तर होता है कि Destructor के नाम के पहले Tilde ( ~ ) का प्रयोग किया जाता है। Constructor व Destructor दोनों Member Functions किसी प्रकार का कोई मान यहां तक कि void भी Return नहीं करते हैं।

हम इस Program के main() function में देख सकते हैं, कि हमने किसी भी Function को Call नहीं किया है। केवल तीन Objects को Declare किया है। फिर भी Output में तीन बार Constructor व तीन बार Destructor Member Function Call हुआ है। ऐसा Output इसलिए प्राप्त हुआ है क्योंकि हमने main() Function में निम्न Statement लिखा है:

ConstNDestDemo first;
ConstNDestDemo second;
ConstNDestDemo third;

इस Statement द्वारा हमनें तीन Objects Declare किए है। जब पहला Object Create होता है तब Constructor Member Function Automatically Execute होता है। उसी तरह से जब दूसरा Statement Execute होता है और दूसरा Object Create होता है, तब दूसरी बार Constructor Member Function Execute होता है।

इसी तरह से तीसरा Object Create होने पर तीसरी बार Contractor Member Function Execute होता है। इसी तरह से जब Program Terminate होता है, तब वापस से ये तीनों Objects Destroy हों और इनकी Memory Release हो जाए, इसलिए वापस से तीन बार Destructor Member Function Execute होता है।

हम देख सकते हैं कि main() Function के Terminate होने के बाद Destructor Function Execute होता है। Constructor व Destructor दो ऐसे Member Functions होते हैं, जो किसी प्रकार का कोई मान Return नहीं करते हैं। (Constructor and Destructor in C++ – TutorialsPoint)

CPP Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook C++ Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

C++ Programming Language in Hindi | Page: 666 | Format: PDF

BUY NOW GET DEMO REVIEWS