【发布时间】:2013-12-20 19:13:04
【问题描述】:
通常在std::vector<valuetype> 中获取给定值的地址是不安全的,因为如果vector 被重新分配(.resize() 或.push_back() 扩展大小),则所有对象的地址在向量可能会改变。
危险:
vector<int> vals ;
vals.push_back( 0 ) ;
int *badP = &vals[0];
vals.push_back( 1 ) ;
// badP could be invalid, if 2nd push_back resulted in realloc
不过,我想知道地图右侧的值类型的安全性。这安全吗?
危险吗?
map<int,int> vals ;
vals.insert( make_pair(1,1) ) ;
int *p1 = &vals[1];
// is p1 guaranteed to be valid, as long as the vals[1]
// is not removed, deleted, or changed?
在什么情况下p1 是一个坏指针?
【问题讨论】:
-
stackoverflow.com/questions/5182122/… 所以 P1 很好,除非你调用 vals.erase(1)。
标签: c++ map key-value value-type