[C++-sig] How to manage smart pointer as return value of a factory?

Julien swell at netcourrier.com
Tue Feb 14 11:02:31 CET 2006


Hello, 
    I use the Boost.Python lib for a couple of weeks now and i am 
facing a pb. 
To sum up i have a small hierarchy of objects and have a factory to 
build concrete object. The pb is i think aroud the auto_ptr object that 
is not correctly managed by my code ( i use version 1.33 ) 
I think that the solution is obvious but i can't sort it out. If you 
could have a look at this small test 

struct X 
{ 
 virtual int fun1() = 0; 
 int fun2() { return 2;} 
 virtual int fun3() { return -1; } 



}; 


struct Y : public X 
{ 
 int fun1() {return 1;} 
 virtual fun3() { return 3; } 


}; 


struct FactY 
{ 
 static std:auto_ptr<X> create() { return std:auto_ptr<X>(new Y());} 


}; 


BOOST_PYTHON_MODULE(hello) 
{ 
 class_<X,  boost::noncopyable >("X",no_init); 
 class_<Y,  boost::python::bases<X> >("Y") 
  .def("fun1",&Y::fun1) 
  .def("fun2",&Y::fun2) 
  .def("fun3",&Y::fun3) 
 ; 

 class_<FactY>("FactY",no_init) 
  .def("create",&FactY::create) 
  .staticmethod("create") 
 ; 



} 


Many Thx 






More information about the Cplusplus-sig mailing list