你能在 C++ 中动态分配一个带有向量的 class 作为字段吗?
Can you dynamically allocate a class with a vector as a field in C++?
我在动态分配的对象中有一个向量。像这样:
class VectorUser{
vector<int> v;
//other stuff
};
//somewhere
VectorUser * vu = new VectorUser();
delete vu;
这段代码安全吗?如果是这样,当向量的大小可以是任何大小时,c++ 如何知道要分配多少内存?
一个vector<foo>
由两部分组成:由指针和元素计数组成的固定大小的块,以及指针指向的可变大小的块。当您创建一个新的 vector<foo>
时,它不包含 foo
;元素计数为零,指针(取决于实现)可能为空。当您销毁向量时(当您删除 vu
时会发生这种情况),它会释放可变大小的块。
Is this code safe?
是的。
If so, how does c++ know how much memory to allocate ...
矢量有责任了解和管理自己的存储具体,因此您不必这样做。
这就是封装的全部要点。 你所要做的就是确保向量本身被正确创建和销毁(这在代码中没有问题,如图所示)。
我在动态分配的对象中有一个向量。像这样:
class VectorUser{
vector<int> v;
//other stuff
};
//somewhere
VectorUser * vu = new VectorUser();
delete vu;
这段代码安全吗?如果是这样,当向量的大小可以是任何大小时,c++ 如何知道要分配多少内存?
一个vector<foo>
由两部分组成:由指针和元素计数组成的固定大小的块,以及指针指向的可变大小的块。当您创建一个新的 vector<foo>
时,它不包含 foo
;元素计数为零,指针(取决于实现)可能为空。当您销毁向量时(当您删除 vu
时会发生这种情况),它会释放可变大小的块。
Is this code safe?
是的。
If so, how does c++ know how much memory to allocate ...
矢量有责任了解和管理自己的存储具体,因此您不必这样做。
这就是封装的全部要点。 你所要做的就是确保向量本身被正确创建和销毁(这在代码中没有问题,如图所示)。