我有一个Database
班。在我的班级A
中,我从数据库和班级B
的两个对象中创建了一个新对象。现在,我想从两个类B
对象中访问数据库对象。我尝试将对象作为指针和引用传递,但是当我打印地址时,它总是不同的。
A.h级:
Database database;
B b1;
B b2;
A.cpp类:
b1.setDatabase(database);
b2.setDatabase(database);
b1.insert("A");
b2.insert("B");
b1.insert("C");
b2.insert("D");
B.h级
Database database;
B.cpp类
void setDatabase(Database& database) {
this->database = database;
}
void insert(std::string name) {
database.dataMap.insert({ name, 10 });
std::cout << database.dataMap.size() << std::endl;
}
Class Database.h
std::map<std::string, int> dataMap;
输出应为 1个 2 3 4
但这是
1 1个 2 2
所以我认为它不是同一对象
答案 0 :(得分:4)
您正在传递参考。您正在执行的操作是复制数据库。您需要复制地址(指针):
B.h级
class B
{
private:
Database* database; //Pointer to Database instead of actual Database object
public:
void setDatabase(Database* database) //Pass pointer(*) instead of reference(&)
{
this->database = database; // Assign pointer instead of calling the implicit copy constructor
}
void insert(string name) {
database->dataMap.insert({ name, 10 }); //Dereferencing and member access(->) instead of member access only(.)
cout << database->dataMap.size() << endl;
}
}
A.h级:
Database database;
B b1;
B b2;
a.cpp类:
b1.setDatabase(&database);
b2.setDatabase(&database);
b1.insert("A");
b2.insert("B");
b1.insert("C");
b2.insert("D");