Oop 共享指针多态对象';s引用未正确传递

Oop 共享指针多态对象';s引用未正确传递,oop,c++11,polymorphism,smart-pointers,Oop,C++11,Polymorphism,Smart Pointers,我有一个程序,其主要调用模拟类对象的方式如下 int number_of_sims = std::stoi(num_sims)/MAX_THREADS_SIM_THREADS; for (int inst=0; inst<Instruments.size(); inst++) { Simulation Simulations(Instruments[inst], Symbols[inst], number_of_sims); SimVector.pu

我有一个程序,其主要调用模拟类对象的方式如下

int number_of_sims = std::stoi(num_sims)/MAX_THREADS_SIM_THREADS;
for (int inst=0; inst<Instruments.size(); inst++)
    {
        Simulation Simulations(Instruments[inst], Symbols[inst], number_of_sims);
        SimVector.push_back(Simulations);
    }
bool XYZ::CalculateTau()
    {
        Logger::getLogger().log(DEBUG, "Calculating Tau  .. ");
        Logger::getLogger().log(DEBUG, "The size of the TS is: " + std::to_string(TS_.size()));
        return true;
    }

Strategy::Strategy(Instrument& instrument, String& Symbol) 
: instrument_(instrument)
{

}

bool Strategy::Initialize()
{
    TS_ = instrument_.GetTS();
return true;
}
现在,我在配置文件中对XYZ策略进行多态调用,如下所示

boost::shared_ptr<Strategy> Simulation::getStrategyName(String& StratName)
{
    if (StratName.compare("XYZ") == 0)
        return (boost::shared_ptr<Strategy>(new XYZ(instrument_, Symbol_)));  
}
在CalculateTau函数中,我尝试获取已按以下方式初始化的TS_u向量的大小

int number_of_sims = std::stoi(num_sims)/MAX_THREADS_SIM_THREADS;
for (int inst=0; inst<Instruments.size(); inst++)
    {
        Simulation Simulations(Instruments[inst], Symbols[inst], number_of_sims);
        SimVector.push_back(Simulations);
    }
bool XYZ::CalculateTau()
    {
        Logger::getLogger().log(DEBUG, "Calculating Tau  .. ");
        Logger::getLogger().log(DEBUG, "The size of the TS is: " + std::to_string(TS_.size()));
        return true;
    }

Strategy::Strategy(Instrument& instrument, String& Symbol) 
: instrument_(instrument)
{

}

bool Strategy::Initialize()
{
    TS_ = instrument_.GetTS();
return true;
}
此处get TS执行以下操作:

class Instrument
{
    public:
    Instrument();
    virtual ~Instrument();
    LongToSymbolInfoPairVector GetTS() { return newTS_; }

private:
    LongToSymbolInfoPairVector TS_, newTS_;

};
现在的问题是,我得到的这个大小的值是0


请帮忙让我知道,我哪里出了问题。

我已经能够通过减少模拟->分析->仪器到仪器->模拟->分析->分析->策略的间接性来绕过这个问题。

请尝试将您的示例简化为a-有大量未关联的成员变量和一些代码,这似乎与问题无关。当然,在最后,您仍然必须确保,您的示例仍然显示相同的错误。这使您和我们更容易找到问题的根源,并允许我们验证可能得出的任何答案。还要更清楚地解释您期望的结果。此外,表面上看,您不仅显示了太多不相关的代码,而且相关的代码似乎也丢失了,比如您在哪里调用initialize或calculate tau
bool XYZ::CalculateTau()
    {
        Logger::getLogger().log(DEBUG, "Calculating Tau  .. ");
        Logger::getLogger().log(DEBUG, "The size of the TS is: " + std::to_string(TS_.size()));
        return true;
    }

Strategy::Strategy(Instrument& instrument, String& Symbol) 
: instrument_(instrument)
{

}

bool Strategy::Initialize()
{
    TS_ = instrument_.GetTS();
return true;
}
class Instrument
{
    public:
    Instrument();
    virtual ~Instrument();
    LongToSymbolInfoPairVector GetTS() { return newTS_; }

private:
    LongToSymbolInfoPairVector TS_, newTS_;

};