Wiki Markup |
---|
Reallocation can occur when a member function modifies its container. Modifying member functions include {{reserve()}} and {{resize()}}, {{push_back()}}, {{pop_back()}}, {{erase()}}, {{clear()}}, {{insert()}}, and others. In addition, assignment operations and modifying algorithms can also cause reallocation. When a container reallocates its elements, their addresses change. Consequently, the values of existing iterators are invalidated \[[Kalev 99|AA. C++ References#Kalev 99]\]. Using invalid iterators yields undefined results. (This problem is also discussed in [DAN33-C|DAN33-C. Do not use invalid iterators].) |
...
Code Block | ||
---|---|---|
| ||
double data[5] = { 2.3, 3.7, 1.4, 0.8, 9.6 };
deque<double> d;
transform(data, data+5,
inserter(d, d.begin()),
bind2nd(plus<int>(), 41));
|
...
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
STL30-C | 1 (low) | 2 (probable) | 1 (high) | P2 | L3 |
References
Wiki Markup |
---|
\[[Meyers 01|AA. C++ References#Meyers 01]\] Item 43: Prefer algorithm calls to hand-written loops. |
Wiki Markup |
---|
\[[Sutter 04|AA. C++ References#Sutter 04]\] Item 84: Prefer algorithm calls to handwritten loops. |
Wiki Markup |
---|
\[[Kalev 99|AA. C++ References#Kalev 99]\] ANSI/ISO C+\+ Professional Programmer's Handbook. |
Wiki Markup |
---|
\[[ISO/IEC 14882-2003|AA. C++ References#ISO/IEC 14882-2003]\] Section 24: Iterators Library. |