gnucap-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gnucap-devel] Weird behaviour of DEV_DOT::clone()


From: Rishabh Yadav
Subject: [Gnucap-devel] Weird behaviour of DEV_DOT::clone()
Date: Fri, 1 Aug 2014 12:14:26 +0530

I tried running the following piece of code and expected the putput to be
''''
hello
hello
''''
instead the output I'm getting is
''''
hello

''''

CARD_LIST cl;
std::string s1 = "hello";
DEV_DOT somedot1;
somedot1.set(s1);
CARD* d = somedot1.clone();
cl.push_back(d);
std::cout << somedot1.s() << "\n";
for(CARD_LIST::iterator i=cl.begin(); i!=cl.end(); ++i)
{
  DEV_DOT* d = dynamic_cast<DEV_DOT*>(*i);
  //assert(d);
  std::cout << d->s() << "\n";
}

So,the issue is object I get after dynamically typecasting the iterator
variable into DEV_DOT(inside the for loop) doesn't contain the string
information in it meaning the string field in the retrieved DEV_DOT object
is blank.
maybe this was happening because copy constructor of DEV_DOT wasn't copying
the "_s" variable
Felix suggested me to apply a patch to d_dot.h

-explicit DEV_DOT(const DEV_DOT& p) :CARD(p) {set_constant(true);}
+explicit DEV_DOT(const DEV_DOT& p) :CARD(p), _s(p._s) {set_constant(true);}

But even applying the patch didn't help
.
One interesting thing I noted is If I use some print statement in the copy
constructor of DEV_DOT defined in d_dot.h then its not printing
anything.Then I commented out the following line

explicit DEV_DOT(const DEV_DOT& p) :CARD(p), _s(p._s) {
std::cout << "cloning...\n";
set_constant(true);}

from d_dot.h and even after calling somedot.clone() in the above piece of
code, the program compiled successfully. I concluded that somedot.clone()
isn't calling the DEV_DOT copy constructor it's calling the clone from some
other library.Am I correct?
I need your help regarding this matter.Thanks in advance.
Regards,
Rishabh Yadav
Senior Undergraduate
Department of Electronics Engineering
IIT (BHU), Varanasi
Varanasi-221005
India


reply via email to

[Prev in Thread] Current Thread [Next in Thread]