带有标准容器和常量引用的c ++代码表现出意想不到的内存

时间:2012-07-19 06:24:28

标签: c++ stl containers

我们在制作中有以下代码(大致相同),并且看到了一些奇怪的行为。标记为“HERE”的部分始终输出最后插入accrualRows字典的内容。如果我们更改hash_map以存储指向'Row'的指针,那么一切正常。我对使用const& amp有点怀疑在std容器中..你不能在标准容器中使用引用,但这些是常量引用,我知道在某些地方处理不同(例如:你可以将临时变量和文字分配给常量引用)

#define hash_map std::tr1::unordered_map
//build up a hash map between deal index and the row for ones we care about

    typedef hash_map<int, const Row &> RowMap;
    RowMap accrualRows;    
    for( int i = 0; i < listItems.numResults(); ++i )
    {
        const Row & accrual = listItems.getResult(i);
        if( accrual.someVar )
        {
            accrualRows.insert( std::make_pair( accrual.index, accrual ) );
         }
    }

    //go through every row and if deal index is in our accrualRows, then
    //modify 

    for( int i = 0; i < numResults(); ++i )
    {
        ExposureRow & exposure = getResult(i);
        RowMap::const_iterator it = accrualRows.find( exposure.index );

        if( it != accrualRows.end() )
        {
            // HERE
            cout << it->second.someVar << endl;
        }
    }
}

任何人都可以看到问题所在吗?

1 个答案:

答案 0 :(得分:1)

您无法在容器中存储引用。容器只能存储对象。如果您需要存储“引用”,可以使用std::reference_wrapper或使用指针。