指向矢量记忆丧失的指针

RIJ*_*JIK -2 c++ memory heap pointers vector

我反对我的指针向量问题...我知道问题可能是什么:

当我创建一个指向向量的指针时,指针会保留堆上向量的大小.所以这基本上意味着,指针现在指向向量的内存而没有任何内部......当我现在调整大小或推回向量时,指针现在仍然指向向量的整个内存或只有内存刚开始分配?

我也想知道,如果你有一些技巧可以解决这个问题(如果我认为是真的)."vector.reserve(n)"是一种实现此目的的方法吗?或者有什么我可以做的事情来覆盖指针内存地址,它被初始化后的向量?

Lig*_*ica 5

"当我创建一个指向向量的指针时,指针会保留堆上向量的大小.

不,它没有!当您创建指向矢量的指针时,您有一个指针.而已.它还没有指向任何东西,它肯定没有为你保留任何"堆内存".

您仍然需要实际创建将指向的向量.

std::vector<int>* ptr1;                            // just a pointer;
ptr1 = new std::vector<int>();                     // there we go;
delete ptr1;                                       // don't forget this;

auto ptr2 = std::make_shared<std::vector<int>>();  // alternatively...
Run Code Online (Sandbox Code Playgroud)

你知道,你需要动态分配一个容器是非常罕见的.通常你只想以通常的方式构建它:

std::vector<int> v;
Run Code Online (Sandbox Code Playgroud)

而已.不需要指针.


当我现在调整大小或推回向量时,指针现在仍然指向向量的整个内存或仅指向开头分配的内存吗?

无论你如何构造/分配它,向量本身都不会自发移动(只有内部为你管理的动态内存),所以你不必担心这一点.


我也想知道,如果你有一些技巧可以解决这个问题

没有必要,因为没有什么可以解决的.


"vector.reserve(n)"是一种实现此目的的方法吗?

从理论上讲,如果这一个问题(事实并非如此)那么,是的,这可能构成解决方案的基础.