for循环c ++中的变量范围奇怪的行为

时间:2015-05-09 16:43:22

标签: c++ copy-constructor stdmap

我在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;

}

0 个答案:

没有答案