C++ 共享ptr向量的向量析构函数问题

C++ 共享ptr向量的向量析构函数问题,c++,audio,vector,set,openal,C++,Audio,Vector,Set,Openal,我正在用openal编写一个声音播放的声音管理器。游戏中的每个实体都存储为共享指针的向量,每个实体都有一个私有的声音对象。当每个对象都被单独定义,而不是放在向量中时,它会完美地工作。然而,当将其放入向量中时,它们似乎没有被正确地销毁,从而导致退出时崩溃。 我还使用一个集合(sound类的静态成员)来跟踪openal为加载的声音返回的源ID loaded sounds/boundary.ogg. There are 1 sources. loaded sounds/player.ogg. The

我正在用openal编写一个声音播放的声音管理器。游戏中的每个实体都存储为共享指针的向量,每个实体都有一个私有的声音对象。当每个对象都被单独定义,而不是放在向量中时,它会完美地工作。然而,当将其放入向量中时,它们似乎没有被正确地销毁,从而导致退出时崩溃。 我还使用一个集合(sound类的静态成员)来跟踪openal为加载的声音返回的源ID

loaded sounds/boundary.ogg. There are 1 sources. 
loaded sounds/player.ogg. There are 2 sources. 
// at this point, the application plays these sounds properly. 

// on app exit:
destroying sounds/boundary.ogg // deletes the source id for this, should be 1 sources left
there are 0 sources // set is now empty, maybe it got corrupted somehow?
程序在此崩溃。调试器说xtree中的这一行导致了崩溃:

while (!this->_Isnil(_Pnode))

如果对象不在向量中,则上述操作没有问题。我还尝试使用向量而不是设置来存储源,但我得到一个错误,指示向量已损坏。有人知道发生了什么吗?

请说明智能指针类型。