【发布时间】:2021-07-23 16:43:33
【问题描述】:
我在动态分配的对象中有一个向量。像这样:
class VectorUser{
vector<int> v;
//other stuff
};
//somewhere
VectorUser * vu = new VectorUser();
delete vu;
这段代码安全吗?如果是这样,当向量的大小可以是任意值时,c++ 如何知道要分配多少内存?
【问题讨论】:
-
代码正确。
std::vector具有固定大小(主要是 3 个成员:数据、大小、容量(指针(最后一个可能是整数类型)))(对数据进行额外分配)。 -
@Jarod42 啊,所以向量对象只存储了一个实际数据的指针。这清除了它。谢谢。
-
考虑一下,如果这会有问题(出于您认为的原因),那么函数
void foo(std::vector<int> x)也会有问题 -
一般情况下,所有相同类型对象的二进制表示具有相同的大小(可通过
sizeof运算符实现)。std::vector<int>对象的二进制表示不包含任何向量元素*。它通常只包含一个指向堆上动态分配存储的指针,其中存储了元素。 (*) 这在理论上可以通过 小缓冲区优化 技术实现,但std::vector不允许这样做。还有其他实现它的向量实现(例如boost::container::small_vector)。
标签: c++ pointers vector dynamic-memory-allocation