for  1) you mean
>
> char *CGetPath() {
>     return getpath().c_str();
>   }


this code will work ?

2017-04-19 14:43 GMT+08:00 Konstantin Khomoutov <
flatw...@users.sourceforge.net>:

> On Wed, 19 Apr 2017 14:23:09 +0800
> hui zhang <fastfad...@gmail.com> wrote:
>
> > 1)   getpath()  return a temp string,  its  c_str() pointer will be
> > free out of function. So I use malloc
>
> I'm not completely sure you're correct.  C++ does not implement garbage
> collection and the object on which you have called c_str() continues to
> live on after getpath() returns.  Now let's cite the manual on c_str():
>
> | The pointer obtained from c_str() may be invalidated by:
> | * Passing a non-const reference to the string to any standard library
> |   function, or
> | * Calling non-const member functions on the string, excluding
> |   operator[], at(), front(), back(), begin(), rbegin(), end() and
> |   rend().
>
> So I'd say in the sequence of calls I propose there's no chance of
> anything quoted to happen -- basically the pointer returned by c_str()
> gets passed to Go where C.GoString() copies the memory pointed to by it.
>
> Things may break if you somehow concurrently call into your C++ side
> and those calls may access the same std::string object we're talking
> about.  But if you do this, all bets are already off.
>
> > 2)  Assume we use the malloc way ,  are  C.GoString()   copying the
> > pointer memory ?  for we need C.free() malloc memory.
>
> Yes, C.GoString() copies the memory.
>
> Yes, you always need to free() what was malloc()ed for you -- because
> you own the returned pointer.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to