$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Daniel Frey (d.frey_at_[hidden])
Date: 2006-03-18 03:53:56
Hello Boosters,
haven't found whether or not this was proposed before, so here we go:
What about adding an operator[] to shared_ptr:
[...]
#include <cstddef> // for std::size_t
[...]
// e.g. below operator*
reference operator[] (std::size_t index) const // never throws
{
BOOST_ASSERT(px != 0);
return px[index];
}
[...]
This makes it easier to wrap memory from system calls:
Before:
char** sym = ::backtrace_symbols(addr,n);
// Lots of code here
sym[0]; // access sym by index
::free(sym); // could be forgotten, code in between could throw, ...
After:
shared_ptr< char* > p( ::backtrace_symbols(addr,n), &::free );
// Lots of code here, allowed to throw now :)
sym[0]; // still access by index, no funny syntax needed
// no need to call ::free explicitly :)
Hope you get the idea :)
What do you think? Any problem with adding operator[] to make it more
similar to a plain old C-pointer (while still being safe AFAICT)?
Regards, Daniel