c – 有一个指向保留向量元素的指针是否合法?
我很好奇,如果这样的事情是合法的:
std::vector<some_class_type> vec; vec.reserve(10); some_class_type* ptr = vec.data() + 3; // that object doesn't exist yet 请注意,我没有尝试访问指向的值. 这是标准对data()的说明,但我不确定它是否相关:
解决方法
您提供的示例不显示任何立即未定义的行为.根据标准,因为您保留的元素的数量大于矢量的当前容量,将会进行重新分配.由于分配发生在保留被调用的位置,所以data()返回的指针本身是有效的.
23.3.6.3/2(重点是我的)
然而,如果您在添加足够的元素之前尝试取消引用指针,其中指针位于data()size()之外,或者如果添加多于capacity()),则会发生未定义的行为. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |