C++ 有一个指向std::vector元素的指针是一个好主意吗?这个元素现在还不存在,但稍后将被构造?
在这种情况下,对象需要在同一容器中存储指向相同类型的其他对象的指针。我将把这些对象保存在C++ 有一个指向std::vector元素的指针是一个好主意吗?这个元素现在还不存在,但稍后将被构造?,c++,pointers,vector,C++,Pointers,Vector,在这种情况下,对象需要在同一容器中存储指向相同类型的其他对象的指针。我将把这些对象保存在std::vector中。构造在某种程度上涉及(默认构造是不可能的),知道其他对象将保存在哪里是非常好的,但是没有必要访问它们。因此,在构建元素之前,我还要创建一个指向元素的指针向量 过程与此类似(我的类比int更复杂): std::vector v; v、 储备(10); std::向量ptr_v; 对于(int i(0);i,因为C++11可以使用: 所以我想说,如果您不重新分配数据,只要您在内存中构造
std::vector
中。构造在某种程度上涉及(默认构造是不可能的),知道其他对象将保存在哪里是非常好的,但是没有必要访问它们。因此,在构建元素之前,我还要创建一个指向元素的指针向量
过程与此类似(我的类比int更复杂):
std::vector v;
v、 储备(10);
std::向量ptr_v;
对于(int i(0);i,因为C++11可以使用:
所以我想说,如果您不重新分配数据,只要您在内存中构造类之前不尝试使用它,就没有什么错。一些实现将进行边界检查,至少在调试模式下是这样。由于形式上未定义行为,这是一种可能的结果。
std::vector<int> v;
v.reserve(10);
std::vector<*int> ptr_v;
for(int i(0); i<10; ++i)
ptr_v.emplace_back(&v[i]) //[] will not do boundary checks
//now fill v and also use ptr_v