Pub*_*bby 10 c++ pointers vector undefined-behavior language-lawyer
我很好奇这种事情是否合法:
std::vector<some_class_type> vec;
vec.reserve(10);
some_class_type* ptr = vec.data() + 3; // that object doesn't exist yet
Run Code Online (Sandbox Code Playgroud)
请注意,我没有尝试访问指向的值.
这是标准所说的data(),但我不确定它是否相关:
返回:指针,这
[data(),data() + size())是一个有效的范围.对于非空向量,data() == &front().
在 STL 的大多数实现中,reserve空向量的 a 将触发重新分配并确保您所指向的数据是拥有/管理的。
data()当调整向量大小时,数据的位置(由 返回的指针值)可能会发生变化。持有指针本身当然是合法的,在未初始化时取消引用它以进行读取当然是未定义的,并且只有在您可以保证向量没有调整大小并且因此分配的范围是时,初始化后取消引用它才是合法的仍然在同一个地方。
增加指向已malloc“d”数据的指针就可以了。在此示例中,您执行指针算术来保存指向您知道已由 分配的数据的指针std::vector。无论指针指向的元素是否已初始化,调整大小操作都会出现问题,因为它可能会释放您指向的内存。
| 归档时间: |
|
| 查看次数: |
453 次 |
| 最近记录: |