根據https://en.cppreference.com/w/cpp/container/vector/data,如果大小為 0,則不保證底層指標為 nullptr
如果 size() 為 0,則 data() 可能會也可能不會回傳空指標。
但這適用于沒有元素的默認初始化 std::vector 嗎?或者這是否只是說明如果向量的所有元素都被擦除,基礎指標可能不會變為 nullptr?
考慮以下行:
std::vector<int> fooArr;
int* fooArrPtr = fooArr.data();
是否保證fooArrPtr等于nullptr?
uj5u.com熱心網友回復:
不。
該標準保證默認初始化等于零,但這并不要求它std::vector會回傳。size()data()nullptr
標準中沒有任何內容可以阻止(并且“不阻止”不等于“要求”)具有零.size()和非零的默認構造向量capacity()。在這種情況下,.data()回傳指向已分配記憶體的指標是可行的(這將是非空的,但取消參考它仍然具有未定義的行為,因為.size()它是零[并且不需要初始化分配的容量])。
如果要測驗向量是否大小為零,請使用.size()或.empty()。(或者,如果向量為空,則產生一個空指標,否則呼叫.data())。
uj5u.com熱心網友回復:
當實體化一個空向量時,不會分配記憶體。然后清除所有元素并不意味著向量釋放其內部記憶體(當插入新元素時這仍然可用)。只有在呼叫解構式時才會釋放記憶體。
長話短說,您不能使用data()來檢查向量是否為空。
此外,甚至不建議檢查向量是否存在某些成員,具體取決于是否data()回傳 anullptr或更少。您不能確定內部模板實作總是授予您此屬性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419323.html
標籤:
