C++ 指针向量

C++ 指针向量,c++,pointers,coding-style,reference,C++,Pointers,Coding Style,Reference,如果我在类标题中有这样的定义: vector<baddie*> baddies; 矢量坏人; 然后我在构造函数中初始化它,如下所示: Class::Class(vector<baddie*> input) { baddies = input; } baddies[0][i]; Class::Class(向量输入) { 坏人=输入; } 我的结局是什么?有两组指针指向对象的两个向量 直接指向原始向量会更好吗?这可能吗 或者在类中保存指针引用向量以避免重复指

如果我在类标题中有这样的定义:

vector<baddie*> baddies;
矢量坏人;
然后我在构造函数中初始化它,如下所示:

Class::Class(vector<baddie*> input)
{
    baddies = input;
}
baddies[0][i];
Class::Class(向量输入)
{
坏人=输入;
}
我的结局是什么?有两组指针指向对象的两个向量

直接指向原始向量会更好吗?这可能吗


或者在类中保存指针引用向量以避免重复指针会更好吗?访问多个类中的对象和对象数组的最佳实践是什么?推荐人?指针?指针引用?提前谢谢你

如果您想共享数据,我可能会使用
std::vector
boost::shared\u ptr

然而,这实际上取决于:

  • 你的意图
  • 如果需要共享数据
  • 如果“坏蛋”真的那么昂贵的话
此外:您应该使用初始值设定项列表来初始化您的成员:

Class:Class(vector<baddie> input)
: baddies( input ) 
{}
Class:Class(矢量输入)
:坏人(输入)
{}

这取决于您想要提供的语义。在C++11中,您可能希望执行以下操作:

Class::Class( vector<baddie*> input ) : baddies( std::move(input) ) {}
Class::Class(向量输入):坏人(std::move(输入)){
这会将内存从参数中的副本移动到成员,而在C++03中,您可能会编写:

Class::Class( vector<baddie*> const & input ) : baddies( input ) {}
Class::Class(向量常量和输入):坏人(输入){}
这将使用副本初始化向量

请注意,此讨论仅涉及向量内容,而不涉及那些
baddie
指针所指向的数据。也就是说,在这两种情况下,都会有两个向量,其指针指向相同的元素(即,内存中每个
坏蛋
只有一个副本,两个指针指向它)

根据应用程序的语义,您可能希望从这种中间的浅层复制转到任意一端:执行深度复制(即在内存中创建新的
baddie
元素,以便在构造函数完成后,原始和副本完全不相关)或根本避免处理,只需存储一个引用/指针,使两个向量完全相同(类内外的插入将在类内外可见)


另外,要注意指针向量,在向量被销毁之前,需要手动管理内存。

这是一种不好的做法,因为它首先将向量复制到构造函数,然后将其复制到名为baddies的向量,在这种情况下,最好将输入作为引用,然后将其复制到baddies。如果你想控制拷贝,那么你可以考虑遍历输入向量并将每个值推到坏人向量。如果你想获得更快的速度,那么你可以把坏家伙向量和输入向量都声明为指针,然后把坏家伙指向输入向量的来源。这使得使用起来有点难看,因为如果使用[]对向量进行索引,那么将首先对指针进行索引,因此必须对其进行两次索引才能到达向量,如下所示:

Class::Class(vector<baddie*> input)
{
    baddies = input;
}
baddies[0][i];

你所有问题的答案都取决于你使用向量的目的。•如果“坏家伙”真的那么昂贵,构造/复制-考虑到棱柱体人口过多,它们构造和复制成本很低:-)有没有一种方法可以简单地传递对原始向量的引用?这样你就有了一个对坏人向量的引用?@SirYakalot只需传递一个引用并存储该引用<代码>类::类(向量[const]&v):坏人(v){},成员
坏人
被声明为:
向量[const]&baddies
(其中
[const]
表示可选的const,也就是说,取决于
Class
是否不需要修改向量,它应该是const)。正如答案中已经提到的,在这种情况下,在
之外执行的更改将在
内部可见。