我在for循环中声明一个变量,在第二次迭代中,变量在声明之前仍然存在。这是代码
createTodo
因此,架构变量在我调试时第一次实例化,并且for循环模式中的第一行上的im是一个有效对象,其所有成员与第一次迭代中的成员相同。然后,当我重新声明Schema schema(文件夹)时,更改存储在第一个位置的模式中的Schema,使得映射模式中的所有先前条目引用相同的模式元素(最后创建的模式元素)。
这对我来说似乎很疯狂。我通过将模式声明为指针并使用new实例化它来解决了这个问题。然后我使用* schemaPtr复制到地图中。这有效,但我对这个问题感到惊讶。这可能是一个复制构造函数问题吗?下面是架构hed
std::map<std::string,Schema> schemas;
std::vector<std::string> schemaFolders = fileUtil.getSubFolders(BASE_FOLDER);
for(int i = 0; i < schemaFolders.size(); i++){
std::string folder(BASE_FOLDER);
folder += "/";
folder += schemaFolders[i];
Schema schema(folder);
schema->loadDatabases();
schemas[schemaFolders[i]] = schema;
std::cout<<std::endl<<schemas[schemaFolders[0]].getSchemaFolder()<<std::endl;
}
复制构造函数
class Schema {
public:
Schema();
Schema( const Schema& other );
Schema& operator=(const Schema& );
Schema(std::string);
virtual ~Schema();
bool createDatabase(std::string);
Database * getDatabase(std::string);
void loadDatabases();
std::vector<std::string> getDatabases();
std::string executeQuery(std::string);
std::string getSchemaFolder(){ return this->schemaFolder;}
private:
std::map<std::string,Database *> databases;
//this is only while we have not implemented sessions this will need to become a map
//that stores lots of different session parameters
Database* curDb;
std::string schemaFolder;
};
和Equals算子
Schema::Schema( const Schema& other ){
this->schemaFolder = other.schemaFolder;
this->databases = other.databases;
this->curDb = other.curDb;
}