Re: priority queue question
On Oct 28, 12:19 pm, vaclavp...@atlas.cz wrote:
Please write me what do you think about this :
/////////////////////////////////////////////////////////////////////////=
////////////////////////////////////////////////////////////////////
// 1) first class is similar to std::priority_queue
// common interface like std::priority_queue
void push(const _Ty& val);
_Ty& top();
void pop();};
That interface allows to make those functions strongly exception-safe.
// 2) this class has only pop and push
void push(const _Ty& val){
_Ty pop(){
if( base::empty()) throw exception;
_Ty val = base::top();
base::pop();
return val;
}};
That interface cannot be made strongly exception-safe because
base::pop() changes the state of the container before the top object
is handed over to the caller.
Then, if the copy constructor of _Ty throws during 'return val;' the
top object is lost. Herb Sutter's book Exceptional C++ and many other
sources cover this. Here is one:
http://www.boost.org/community/exception_safety.html
Ali
P.S. Any name that begins with an underscore followed by a capital
letter is reserved. Ty_ would be a better name.