具有指针参数的类函数未保存到向量
Class function with a pointer parameter not saving to vector
我不知道该如何命名,但基本上,我有一个类函数,它旨在为类中的能力向量添加一个新的能力。
//Part of class Unit
public:
vector <Ability*> myAbilities;
void AddAbility(Ability * ability)
{
myAbilities.push_back(ability);
cout<<"Ability added"<<endl;
cout<<ability->GetName()<<endl;
ability = NULL;
delete ability;
}
我非常确信,当函数完成时,参数中的指针基本上会消失,当我试图在主函数中输出能力名称时,它不存在。我更喜欢使用这个功能:
AddAbility(new Fireball());
火球是一个儿童班的能力。
如何通过这个函数将新的能力添加到指向类ability的指针向量中?我很确定通过引用来做这件事是没有意义的,我可能只是忘记了一些基本的东西,但我似乎无法准确定位。
如果使用C++11进行编译,请考虑使用共享指针,并让系统处理内存管理:
根据Casper Von B在下面的评论,unique_ptr
似乎更适合您的特定情况(更新):
std::vector<std::unique_ptr<Ability>> myAbilities;
void AddAbility(Ability * ability)
{
auto ptr = std::unique_ptr<Ability>(ability);
myAbilities.push_back(std::move(ptr));
cout << "Ability added" << endl;
cout << ability->GetName() << endl;
}
或者,您可以让Ability
完成所有的构建/破坏。一般来说,创建对象的类应该是销毁对象的类
此外,这个:
ability = NULL;
delete ability;
很可能是倒退的。当你执行清理时,一定要颠倒顺序:
delete ability;
ability = NULL;
您删除了该功能(因此指针不再指向任何内容)。在能力向量中,你有一个指针,它现在不指向任何东西。所以,不要取消和删除指针。能力销毁应该由能力销毁器完成。
是的,指针被复制到向量中,就像0x455ff930
一样,但请记住,当您删除它时,内存0x455ff930
的位置(指针指向的位置)不再与能力相关。
相关文章:
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 如何在数组和向量 c++ 中存储和保存输入
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- C++ 将地址保存为字符串的向量转换为新的向量
- 使用 for 循环是否比在 C++ 中将内容保存在向量中更快?
- 将所有正则表达式匹配项保存在向量上
- 如何在向量中保存位置以供以后插入?
- 向量迭代器不兼容的错误,用于保存另一个向量的迭代器的向量
- 将局部变量保存到全局向量中,为什么离开局部范围后可以得到这些局部变量?
- 为什么可以访问在 for 循环中创建的向量,这些向量被保存到向量向量中
- 如何诊断保存和加载位向量(std::vector)的奇怪行为<bool>?
- 如何创建一个function_list<>类来保存具有相同模板语法的 std::function<>s 向量?
- 如何保存枚举类型的向量的向量
- 为什么我的将向量保存到文件然后再次读出的方法不起作用?
- 我可以将某些对象的指针保存在向量中,而不是将指针调用内联函数
- 分类一个向量,该向量由该类中的成员字符串保存对象
- 如何从二进制文件中读取双精度并将其保存在向量中
- 如何在向量中保存不同的分布
- 可以使用 std::p air 保存三种数据类型的向量
- c++如何保存向量项和双精度