例如,如果我做這樣的事情:矢量的第一個元素的地址是否固定?
vector<int> myvector;
myvector.push_back(100);
int * ptr = &(myvector[0]);
myvector.clear();
myvector.push_back(10);
將PTR還有效嗎?或者現在它可能指向垃圾?
例如,如果我做這樣的事情:矢量的第一個元素的地址是否固定?
vector<int> myvector;
myvector.push_back(100);
int * ptr = &(myvector[0]);
myvector.clear();
myvector.push_back(10);
將PTR還有效嗎?或者現在它可能指向垃圾?
23.2.3§4說:
a.clear()
[...] 會使所有的引用,指針和迭代器指的是a
元素還可能違反了過去,一個結束迭代器。
由於是「非失效」,使用後ptr
結果clear
不確定的行爲沒有這樣的事情。
在附註中,不需要&(myvector[0])
中的括號。在C++中,Postfix運算符總是比前綴運算符具有更高的優先級,所以編寫&myvector[0]
就好了。
它可能指向垃圾。 vector
當實例增長或縮小時,根據需要重新分配內存,因此不能依賴地址不變。這就是爲什麼vector
使用的類型必須遵守STL兼容的約束,如可複製性。這也是爲什麼auto_ptr
在STL容器中不安全的原因。
啊。謝謝,我糾正了。 – wilhelmtell 2012-01-28 17:02:07