C++ 在std::vector中存储指针
假设我有一个包含许多数据成员的类A。当我创建这个类的向量时C++ 在std::vector中存储指针,c++,stl,C++,Stl,假设我有一个包含许多数据成员的类A。当我创建这个类的向量时std::vector vec和调用向量推回(A(…),有时向量必须重新分配内存,并将所有以前的对象移动到新内存中。这将复制许多对象。我找到的解决方案是存储指向在堆上分配的对象的指针。这将使向量拷贝为4字节整数,这是可以的,但我从未见过有人这样做,所以我不确定这是否是正确的方法 这是标准的吗?这里有一个简单的例子来说明std::vector与std::vector相比有多普遍。我选择了llvm 6.0.0,因为它被许多人认为是CPP开发的
std::vector vec代码>和调用向量推回(A(…)代码>,有时向量必须重新分配内存,并将所有以前的对象移动到新内存中。这将复制许多对象。我找到的解决方案是存储指向在堆上分配的对象的指针。这将使向量拷贝为4字节整数,这是可以的,但我从未见过有人这样做,所以我不确定这是否是正确的方法
这是标准的吗?这里有一个简单的例子来说明std::vector
与std::vector
相比有多普遍。我选择了llvm 6.0.0,因为它被许多人认为是CPP开发的领先标准。结果如下:
$ grep -rn "vector<.*\*" | wc -l
613
$ grep -rn "vector<.*" | wc -l
1707
$grep-rn”向量这是一个非常常见的指针向量。然后你只需做vec。推回(new a(…);
使用make_unique或make_shared来管理所有权,而不是使用new。它计算变量声明的数量(以及使用和typedef
)是用指向类的指针完成的(613)从所有变量声明池中(以及使用和typedef
)。因此对于这个特殊的llvm 6.0.0
代码库,大约三分之一的向量带有指向类的指针。这是非常常见的。