Hi, I am using polymorphic archive in my code and I am using it as follows, 1 void func(std::stringstream &ss, boost::archive::polymorphic_oarchive *&ptr) 2 { 3 ptr = new boost::archive::polymorphic_text_oarchive(ss); 4 return; 5 } 6 int main() 7 { 8 std::stringstream ss; 9 boost::archive::polymorphic_oarchive *ptr = NULL; 10 func(ss, ptr); 11 delete ptr; //Will this delete object properly????? 12 } Now the question is, whether 'delete' one line no. 11 will work properly or not? And is this a right way to use polymorphic archive? Thanks, Sameer
AMDG sam p wrote:
I am using polymorphic archive in my code and I am using it as follows,
1 void func(std::stringstream &ss, boost::archive::polymorphic_oarchive *&ptr) 2 { 3 ptr = new boost::archive::polymorphic_text_oarchive(ss); 4 return; 5 } 6 int main() 7 { 8 std::stringstream ss; 9 boost::archive::polymorphic_oarchive *ptr = NULL; 10 func(ss, ptr); 11 delete ptr; //Will this delete object properly????? 12 }
Now the question is, whether 'delete' one line no. 11 will work properly or not? And is this a right way to use polymorphic archive?
Yes. polymorphic_oarchive has a virtual destructor. In Christ, Steven Watanabe
Looks like something is wrong over here. If I check for memory leak using valgrind on Linux (or Boundschecker on Windows) I get memory leak with below given code. Here is some info on the same, ****************************************** ==6794== 80 bytes in 1 blocks are definitely lost in loss record 8 of 11 ==6794== at 0x40219DC: operator new(unsigned) (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so) ==6794== by 0x804C1AB: boost::archive::detail::basic_oarchive::basic_oarchive() (in /home/sameer/work/a.out) ==6794== by 0x804BF84: boost::archive::detail::common_oarchive<boost::archive::text_oarchive>::common_oarchive() (in /home/sameer/work/a.out) ==6794== by 0x804BFAC: boost::archive::basic_text_oarchive<boost::archive::text_oarchive>::basic_text_oarchive() (in /home/sameer/work/a.out) ==6794== by 0x804BFFC: boost::archive::text_oarchive_impl<boost::archive::text_oarchive>::text_oarchive_impl(std::ostream&, unsigned) (in /home/sameer/work/a.out) ==6794== by 0x804C08E: boost::archive::detail::polymorphic_oarchive_impl<boost::archive::text_oarchive_impl<boost::archive::text_oarchive>
::polymorphic_oarchive_impl<char, std::char_traits<char> (std::basic_ostream<char, std::char_traits<char> >&, unsigned) (in /home/sameer/work/a.out) ==6794== by 0x8049B5A: func(std::basic_stringstream<char, std::char_traits<char>, std::allocator<char> >&, boost::archive::polymorphic_oarchive*&) (in /home/sameer/work/a.out) ==6794== by 0x8049BE0: main (in /home/sameer/work/a.out)
But if I modify below given code as given below then it doesn't show any memory leak. I am using boost 1.32. *********************************** changed code ********************************** 9 boost::archive::polymorphic_oarchive *ptr = NULL; 10 func(ss, ptr); 11 /* delete ptr; //Will this delete object properly????? */ boost::archive::polymorphic_text_oarchive *p = dynamic_cast<boost::archive::polymorphic_text_oarchive*>(ptr); delete p; //Deleted after NULL check ********************************** Thanks, Sameer On 12/2/08, Steven Watanabe <watanabesj@gmail.com> wrote:
AMDG
sam p wrote:
I am using polymorphic archive in my code and I am using it as follows, 1 void func(std::stringstream &ss, boost::archive::polymorphic_oarchive *&ptr) 2 { 3 ptr = new boost::archive::polymorphic_text_oarchive(ss); 4 return; 5 } 6 int main() 7 { 8 std::stringstream ss; 9 boost::archive::polymorphic_oarchive *ptr = NULL; 10 func(ss, ptr); 11 delete ptr; //Will this delete object properly????? 12 } Now the question is, whether 'delete' one line no. 11 will work properly or not? And is this a right way to use polymorphic archive?
Yes. polymorphic_oarchive has a virtual destructor.
In Christ, Steven Watanabe
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
participants (3)
-
Kim Barrett
-
sam p
-
Steven Watanabe