类成员变量未保存状态
Class Member Variable not Saving State
我是C/C++的新手,所以如果这是一个愚蠢的问题,请原谅。
我有一个控制器类,它有一个私有成员变量vector<Contact> contacts
。该类具有允许我们更改该向量的状态的方法(标准CRUD操作)。
该类有一个名为get_contacts()
的公共方法,它返回对象的私有向量:
std::vector<Contact> Contacts_Controller::get_contacts() const {
return this->contacts;
}
我有一个方法,通过push_back()
将contact
添加到这个私有向量。问题是,如果add_contact()
方法使用访问器方法,则类变量不会得到更新:
void Contacts_Controller::add_contact(const Contact &contact) {
this->get_contacts().push_back(contact);
}
我假设这是内存问题,也许我在使用const
时遇到了一些问题,或者我没有正确使用引用,因为以下代码完全符合预期:
void Contacts_Controller::add_contact(const Contact &contact) {
this->contacts.push_back(contact);
}
使用任何一种方法都不会返回任何错误,但如果我在使用第一种方法后请求联系人的矢量,它将为空,而第二种方法会正确地将数据添加到矢量中。
同样,如果这是一个愚蠢的问题,我很抱歉,但我完全被难住了,我不知道该搜索什么!我将如何解决此引用问题?
"该类有一个名为get_contacts()的公共方法,它返回对象的这个私有向量"
不,它返回一份副本。您需要通过引用返回以获得实际成员:
std::vector<Contact>& Contacts_Controller::get_contacts(){
return this->contacts;
}
注意我删除了const
,否则您将不得不将返回标记为const
,并且无法修改它。
问题是函数按值返回向量,这意味着调用函数会得到一个副本。
当您对其调用push_back()时,只有副本会获得额外的成员。
您的函数可能会返回一个引用。然后您的用户可以调用push_back()。如果它是类的成员变量,并且您返回的是一个非常数引用(必须允许修改),那么您的函数可能也是非常数的。
因此:
std::vector<Contact> & Contacts_Controller::get_contacts() // not const
{ return this->contacts; }
您也可以将只读版本作为重载。
std::vector<Contact> const & Contacts_Controller::get_contacts() const
{ return this->contacts; }
此版本允许对联系人进行只读访问,也可以是常量成员函数。
调用get_contacts
时,返回this->contacts
的副本。如果你想共享一个向量,可以返回一个对它的引用(但你必须确保你的引用保持有效,这样你的类实例就不会被移动或复制),也可以使用智能指针为你的向量动态分配空间,并延长其生存期,直到最后一个对其的引用被破坏。在这种情况下,使用类型为std::shared_ptr<std::vector<Contact> >
的成员
- 如何保存RNN的状态以从TF中的图中提交
- 无法恢复我的安卓 c++ 游戏的状态(状态>保存状态始终为空)
- 如何在 Tensorflow C++ 中定义变量的自定义有状态 Op 保存值
- 使用导入的图像保存在 QT 中的 QLabel 中,保存 GUI 的状态
- 如何在C++中保存和恢复 TensorFlow 图及其状态
- Q油漆保存状态
- 如何使用CUDA CURAND保存和恢复随机数生成器的状态
- C++在保存受用户输入影响的变量的状态时使用临时变量或类变量
- 在基于对话框的MFC应用程序中保存和恢复元素的状态
- 类成员变量未保存状态
- 设计模式保存MFC对话框控件状态的步骤
- QtT 如何在 QMainWindow 中更改中央小部件时保存数据/状态
- 将QCheckBox的状态保存在文件中,并在程序重新启动时加载状态
- 是否有必要在此处保存 FPU 状态
- Qt QStandardItem setCheckable(true) 不保存复选框状态
- 如何保存std::mersenne_twister_engine的状态以便以后恢复
- 保存调试状态以跳过长时间的计算
- 保存复杂的脚本对象的状态
- 比使用流来保存boost随机生成器状态更快的替代方案
- 程序的类似冬眠的保存状态