我是一名 C++ 新手,正在研究大学项目 Driver Book in C++。 我是第一次使用向量,我想让它与动态内存分配一起工作。
我有这样声明的向量:
vector <item> book;
需要什么才能使其与动态内存分配一起工作?
提前致谢。
进一步说明:
vector<T>
是一个可调整大小的数组,它可以保存T
类型的对象。
它在内部动态获取内存。现在,如果您想创建具有动态分配的向量,您可以随时使用 vector<item>* myVec = new vector<item>();
尽管通常您永远不需要动态创建 vector
。
完成。当您
vector
进入其中时,push_back
已经在内部动态分配。
我想指出,当其他人说“当你将其推入向量时,向量已经在内部动态分配”时,这意味着推入向量的对象是动态分配的,而不是向量本身在创建时自动动态分配的。
例如,如果您希望在函数内部创建的向量持续存在,下面的代码将导致未定义的行为,因为向量本身不会自动动态分配。返回后,向量的内存位置会自动清理。该引用将引用垃圾。
#include <iostream>
#include <vector>
using namespace std;
vector<int>& f() {
vector<int> v = vector<int>({4, 5, 6});
return v;
}
int main() {
vector<int>& b = f();
std::cout << "Hello World!\n";
}
如果您希望在函数返回时保持向量存在,您仍然需要使用动态分配的内存。
#include <iostream>
#include <vector>
struct Node {
int a;
Node(int a) : a(a) {}
};
using namespace std;
vector<int>& f() {
vector<int>& v = *new vector<int>({4, 5, 6});
return v;
}
int main() {
vector<int>& b = f();
vector<int>* bptr = &b;
cout<<b[2]<<endl;
delete bptr;
std::cout << "Hello World!\n";
}