On Jan 16, 2013, at 09:45, Alex Cohn wrote:
> The difference is that compound literal is resolved at compile time,
> so using it inside a loop does not produce extra instances.
Evidently, as long as this is not a decision that's left to the compiler.
> Here is my C++ way of defining av_err2str:
>
> #ifdef __cplusplus
>
> static const std::string av_make_error_string(int errnum)
> {
> char errbuf[AV_ERROR_MAX_STRING_SIZE];
> av_strerror(errnum, errbuf, AV_ERROR_MAX_STRING_SIZE);
> return (std::string)errbuf;
> }
>
> #undef av_err2str
> #define av_err2str(errnum) av_make_error_string(errnum).c_str()
>
> #endif // __cplusplus
Almost exactly as I also would have done it, or else using a specific new class
containing a modifiable buffer of size AV_ERROR_MAX_STRING_SIZE to avoid the
local variable and copying the string.
But I have a doubt (I'm far from a C++ expert) ... what's the scope of the
object returned as return (std::string)errbuf? AFAIK C++ doesn't have a
retain/release mechanism like ObjC has, so is it the compiler that keeps track
of when to deconstruct the returned string object? In C, returning a local
string variable comes without warranty that the contents will still be
available when the caller wants to access them!
R.
_______________________________________________
Libav-user mailing list
[email protected]
http://ffmpeg.org/mailman/listinfo/libav-user