नमस्ते मैंने आज एक प्रश्न पूछा कि एक ही वेक्टर सरणी में विभिन्न प्रकार की वस्तुओं को कैसे सम्मिलित किया जाए और उस प्रश्न में मेरा कोड था
gate* G[1000];
G[0] = new ANDgate() ;
G[1] = new ORgate;
//gate is a class inherited by ANDgate and ORgate classes
class gate
{
.....
......
virtual void Run()
{ //A virtual function
}
};
class ANDgate :public gate
{.....
.......
void Run()
{
//AND version of Run
}
};
class ORgate :public gate
{.....
.......
void Run()
{
//OR version of Run
}
};
//Running the simulator using overloading concept
for(...;...;..)
{
G[i]->Run() ; //will run perfectly the right Run for the right Gate type
}
और मैं वैक्टर का उपयोग करना चाहता था इसलिए किसी ने लिखा कि मुझे ऐसा करना चाहिए:
std::vector<gate*> G;
G.push_back(new ANDgate);
G.push_back(new ORgate);
for(unsigned i=0;i<G.size();++i)
{
G[i]->Run();
}
लेकिन तब उन्होंने और कई अन्य लोगों ने सुझाव दिया कि मैं बूस्ट पॉइंटर कंटेनर
या बेहतर उपयोग करूंगा shared_ptr
। मैंने इस विषय के बारे में पढ़ने में पिछले 3 घंटे बिताए हैं, लेकिन दस्तावेज मुझे बहुत उन्नत लगते हैं। **** क्या कोई मुझे shared_ptr
उपयोग का एक छोटा कोड उदाहरण दे सकता है और उन्होंने इसका उपयोग करने का सुझाव क्यों दिया shared_ptr
। इसके अलावा अन्य प्रकार भी हैं ptr_vector
, ptr_list
और ptr_deque
** **
Edit1: मैंने एक कोड उदाहरण भी पढ़ा है जिसमें शामिल हैं:
typedef boost::shared_ptr<Foo> FooPtr;
.......
int main()
{
std::vector<FooPtr> foo_vector;
........
FooPtr foo_ptr( new Foo( 2 ) );
foo_vector.push_back( foo_ptr );
...........
}
और मैं वाक्यविन्यास नहीं समझता!
main
वेक्टर बनाने की पहली पंक्ति जिसमें एक प्रकार का साझा करने के लिए साझा संकेत हो सकते हैंFoo
; दूसरा व्यक्ति इसकाFoo
उपयोग करने के लिएnew
, और इसे साझा करने के लिए एक साझा सूचक बनाता है; तीसरा वेक्टर में साझा सूचक की एक प्रति डालता है।