卡在构造函数c++中

Stuck in constructor c++

本文关键字:c++ 构造函数      更新时间:2023-10-16

我有一个main函数,它在for循环中创建类Simulation的实例,在Emulation体指针的实例。

我的问题是,从输出中,我知道Simulation的构造函数完成了对Population*向量的推回,但它似乎并没有真正离开构造函数,因为main中的for循环没有继续。非常非常感谢!

main:中的代码段

std::vector<Simulation> openSimulations ; 
       for(size_t i(0) ; i < n ; ++i)
       {
           std::cout << "Rounds that should be completed : " << n << std::endl ; 
           std::cout << "Stuck 3 !" << std::endl ;
           openSimulations.push_back(Simulation(f, n, t, p, M, m)) ;
           std::cout << "Finished adding!" << std::endl ; 
       }

模拟中的代码段

Simulation::Simulation(std::vector<double> pInitialFrequencies, int pPopSize, 
        int pGenerationNumber, int pPopulationNumber, bool pMigration,
        double pMigrationProbability )
:myGenerationNumber(pGenerationNumber), migration(pMigration),
    myMigrationProbability(pMigrationProbability)
{
    std::cout << "Stuck 6 !" << std::endl ;
    for(int i(0) ; i < pPopulationNumber ; i++ )
    {
        myPopulations.push_back(new Population(pInitialFrequencies,
            pGenerationNumber, pPopSize,  myMigrationProbability)) ;
        std::cout << "Stuck 7 !" << std::endl ;
    }
    std::cout << "Have exited or loop in Simulation::Simulation!" << std::endl ;
}

这是我从终端的输出:

Dimitris-MacBook-Pro:CMakeTemp Dimi$ ./Genomics  -n 5 -f 0.2 -f 0.2 -f 0.6 -T 100 -N 100 -A 3  -r 3
Rounds that should be completed : 5
Stuck 3 !
Stuck 6 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Have exited or loop in Simulation::Simulation!
Finished adding!
Rounds that should be completed : 5
Stuck 3 !
Stuck 6 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Inside Population::Population
Finished Adding Initial frequencies to Population's attribute
Stuck 7 !
Have exited or loop in Simulation::Simulation!

大家好,我找到了自己问题的答案!

仿真的析构函数制作不当。

有了这样的析构函数,它现在就可以工作了:

Simulation::~Simulation()
{
    for(auto population: myPopulations)
    {
        population = nullptr ;
        delete population ;
    }
}

我把这个问题留在这里,以防有人遇到同样的问题。。