如何正确地将对象添加到向量,而无需两次调用析构函数
How to add objects to vectors correctly, without calling destructor two times
我正在尝试在vector中创建现有对象的列表。这是我到目前为止所拥有的:
void Program::addClient(string name){
vector<Client> *ptr = &(impl->clients);
Client cl(name);
ptr->push_back(cl);
}
问题是析构函数将被调用两次:第一次,当方法 addClient 结束时,第二次,当调用此方法类的析构函数时。因此,我得到了一个错误(显然)。所以我想写这样的东西:
void Program::addCategory(string name){
vector<Category> *ptr = &(impl->categories);
Category *c = new Category(name);
ptr->push_back(c);
}
我相信,通过这样做,我会摆脱析构函数问题,但还有另一个问题。我的 IDE 在 ptr
和 push_back
之间的符号 ->
处抛出错误,说"没有过载函数实例"。
我应该怎么做,也许你有什么提示?
如何正确地将对象添加到向量,而无需两次调用析构函数
与emplace_back
:
ptr->emplace_back(name);
问题是析构函数将被调用两次......因此,我得到了一个错误(显然)。
这应该不会给行为良好的类带来错误。如果调用push_back
给您带来了问题,则暗示Client
类有问题。确保它是正确可复制和可分配的。
问题是你的误解
问题是析构函数将被调用两次:第一次,当方法 addClient 结束时,第二次,当调用此方法类的析构函数时。
以上不是问题。 将对象插入std::vector<Client>
时,您正在插入副本。析构函数运行两次,因为在创建副本后,有两个对象。
如果这实际上导致错误,则很可能Client
无法正确复制,您需要使其可复制或重新考虑如何使用它。
相关文章:
- 析构函数调用
- 在具有向量的类构造函数中进行析构函数调用
- 从 c++ 中派生类的析构函数调用虚函数
- C++析构函数调用两次,堆栈分配的复合对象
- C++ 在析构函数调用之前删除的动态成员数组
- 析构函数调用c++中的一个向量
- Singleton模式中的手动析构函数调用:调用多次
- 从内部类的析构函数调用虚拟函数
- 与 boost odeint 集成期间的析构函数调用
- 堆栈展开如何与析构函数调用有关?
- C++:优化析构函数调用
- 以逗号分隔的表达式中的析构函数调用
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 从C++中的虚拟析构函数调用虚拟方法
- 从指针返回对象时出现意外的析构函数调用
- 使用 decltype 显式析构函数调用
- C++析构函数调用了错误的对象
- 了解虚拟函数和析构函数调用
- 多重继承析构函数调用他自己和父析构函数?c++
- 析构函数调用表单不适当的库