Probably the code is inlined in many translation units and the breakpoint is inserted many times.
But I've not seen any commands to delete the breakpoint from your log.
Please do a session reproducing the exact bug you see. And when the breakpoint is hit for the second time execute the gdb command "info breakpoints".
It is not inserting many times, because phantom breakpoint place do not depend on where the normal points.
I do not understand what "hit for the second time" means. A point is always, if there is at least one other point.
Debugger full log with "info breakpoints" after hit.
http://www.everfall.com/paste/id.php?gsb8d80b8zasThat is interesting:
Debugger stops at the point in line 143. But info is displayed point only in lines 102, 104, 106, where at the moment I have is my real points ...and, method begin for all three , but in lines 102, 104 and 106 i have code of Constructor
98.
99. explicit DynamicArrayImplStack(ConstIteratorType first, ConstIteratorType last):
100. mSize( std::distance(first, last) )
101. { // I have breakpoint there
102. if(mSize == 0) return;
103. // there
104. newBufferAllocateForElements(mSize);
105. // and there
106. ElementCopier<T>::CopyElementsArrayNewPlace(*first, data(), mSize);
107. }
108.
As you can see this code has nothing to do with the begin(), 102 for sure.

For reasons of clarity, I left only 102, all in exactly the same.
http://www.everfall.com/paste/id.php?5zd4rteraejt