Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在std::vector中存储指针_C++_Stl - Fatal编程技术网

C++ 在std::vector中存储指针

C++ 在std::vector中存储指针,c++,stl,C++,Stl,假设我有一个包含许多数据成员的类A。当我创建这个类的向量时std::vector vec和调用向量推回(A(…),有时向量必须重新分配内存,并将所有以前的对象移动到新内存中。这将复制许多对象。我找到的解决方案是存储指向在堆上分配的对象的指针。这将使向量拷贝为4字节整数,这是可以的,但我从未见过有人这样做,所以我不确定这是否是正确的方法 这是标准的吗?这里有一个简单的例子来说明std::vector与std::vector相比有多普遍。我选择了llvm 6.0.0,因为它被许多人认为是CPP开发的

假设我有一个包含许多数据成员的类A。当我创建这个类的向量时
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
代码库,大约三分之一的向量带有指向类的指针。这是非常常见的。