C++ 简单的动态添加和使用对象

C++ 简单的动态添加和使用对象,c++,vector,C++,Vector,我不知道如何正确地做到这一点,例如,首先我创建了一个向量来存储对象 vector<dog> mydogs; 它抱怨参数类型不匹配,所以我将向量更改为下面的代码,因为我想在向量上存储指针 vector<&dog> mydogs; 但是我现在无法访问迭代器,甚至想到这一点,我都有点迷茫。小崽子。你的第一次尝试很好。您希望存储一组狗,既不是引用也不是指针 vector<dog> mydogs; 或者,如果您有一只特定的狗,您也可以添加它: dog Lo

我不知道如何正确地做到这一点,例如,首先我创建了一个向量来存储对象

vector<dog> mydogs;
它抱怨参数类型不匹配,所以我将向量更改为下面的代码,因为我想在向量上存储指针

vector<&dog> mydogs;
但是我现在无法访问迭代器,甚至想到这一点,我都有点迷茫。

小崽子。你的第一次尝试很好。您希望存储一组狗,既不是引用也不是指针

vector<dog> mydogs;
或者,如果您有一只特定的狗,您也可以添加它:

dog LordFleuroVanHautendeck;
mydogs.push_back(LordFleuroVanHautendeck);
甚至在一行中:

mydogs.push_back(dog()); // poor dog has no name
最后一行可能与原始行相似,但缺少的
new
非常重要
dog()
将是一只
dog
,可用于
vector::push_back()
,而
新狗(即
dog*
)不能使用。

该语句

new dog()
返回指向新分配对象的指针(
dog*
)。只用

vector<dog> mydogs;
如果您确实希望通过
new
关键字动态创建dog实例,您可能需要使用

vector<dog*> mydogs;
mydogs.push_back(new dog());

指向狗的指针向量:

std::vector<dog *>

我建议您查看智能指针,因为
向量
不会释放
狗所占用的内存;它只是破坏了皮带

我明白了这一点,我遇到的问题是使用上面展示的迭代器访问它
使用迭代器访问:
(*iterator)->bark()bark
方法与该项相关联。否则,您必须双重解除防护,然后访问成员,类似于
**iter.bark()
。这就提出了“.”属于什么的问题。另一个选择是
*iter->bark()
,它会问“这个->应用于什么?”
vector<dog> mydogs;
mydogs.push_back(dog());
vector<dog*> mydogs;
mydogs.push_back(new dog());
while(mydogs.size() > 0){
    delete mydogs.back(); // delete the dog
    mydogs.pop_back();    // get rid of the pointer
}
std::vector<dog *>
  std::vector<dog *> animals;
  //...
  animals.push_back(new dog);