If Jim is right,string's memory allocated is different in python and c++.However,before python handle some strings from c++,it must convert string from c++'s memory to python's memory.
So smart pointers have not changed anything.It must keep a separate copy of a string in c++ memory and python memory. My idea.In the future, I will be write a wrapped class. When the c++ interface, it store the data by std :: string.When the python interface,it store the data by the Python str object. And perhaps this is a good way. 2012/12/25 Niall Douglas <s_sourcefo...@nedprod.com> > Traditionally, the proper solution to avoid deep copies is to wrap a > std::shared_ptr<std::string> instead of a std::string directly. > > If your strings are short of course, it may well be faster to leave > it as is. std::shared_ptr is not lightweight and may use atomic > instructions, the bandwidth for which in a system is always limited. > > Niall > > On 23 Dec 2012 at 16:16, simon zhang wrote: > > > ..so,It seems I can only convert std::string and make a deep copy.I can > > only avoid it as much as possible.Thank you. > > > > > > 2012/12/22 Jim Bosch <tallji...@gmail.com> > > > > > On 12/21/2012 03:52 AM, simon zhang wrote: > > > > > >> How to converter std::string* in boost.python?I have to handle some > data > > >> of c++ in python.The data may be big.So I return a pointer to python. > > >> But there are some errors. > > >> > > >> > > > If the data is big, and you really want to avoid a deep copy, the only > way > > > to use it is if you manually allocate the memory as a Python str object > > > using the Python C API or return it as something else (like a NumPy > array > > > or buffer object, or a custom Boost.Python-wrapped class) that can hold > > > C++-allocated memory. A Python str object always owns its own memory, > and > > > so does std::string, so you can't convert from one to the other > without a > > > deep copy. > > > > > > Jim > > > > > > ______________________________**_________________ > > > Cplusplus-sig mailing list > > > Cplusplus-sig@python.org > > > http://mail.python.org/**mailman/listinfo/cplusplus-sig< > http://mail.python.org/mailman/listinfo/cplusplus-sig> > > > > > > > > -- > Any opinions or advice expressed here do NOT reflect those > of my employer Research In Motion Inc. > Work Portfolio: http://careers.stackoverflow.com/nialldouglas/ > > > > > _______________________________________________ > Cplusplus-sig mailing list > Cplusplus-sig@python.org > http://mail.python.org/mailman/listinfo/cplusplus-sig >
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig