当我boost::signals
尝试将多个信号连接到单个slot_type
. 我已经在各种论坛上看到过同样的泄漏报告,但找不到任何提及正确方法或任何解决方法的信息。
我正在尝试做的事情:
我正在尝试将结果传递boost::bind()
给函数。在此功能中,我想将多个信号连接到该结果。第一个连接工作正常,但第一个连接之后的每个连接都会泄漏一个句柄。
这是一些示例代码:
typedef boost::signal0<void> LeakSignalType;
class CalledClass
{
/* ... */
void connectToSlots(LeakSignalType::slot_type &aSlot)
{
LeakSignalType *sig;
std::list<LeakSignalType*> sigList;
std::list<LeakSignalType*>::iterator sigIter;
for(int i = 0; i < 50; i++)
{
/*Connect signals to the passed slot */
sig = new LeakSignalType;
sig->connect(aSlot);
sigList.push_back(sig);
}
for(sigIter = sigList.begin(); sigIter != sigList.end(); sigIter++)
{
/* Undo everything we just did */
delete *sigIter;
}
sigList.clear();
/*Everything should be cleaned up now */
}
/* ... */
}
class CallingClass : public boost::signals::trackable
{
CalledClass calledInstance;
/* ... */
void boundFunction(int i)
{
/*Do Something*/
}
void connectSignals()
{
calledInstance.connectToSlots(boost::bind( &CallingClass::boundFunction, this, 1));
}
/* ... */
};
现在打电话CallingClass::connectSignals()
。
我希望调用connectToSlots
将 50 个信号连接到一个插槽,然后断开并清理所有这些信号。实际发生的是 1 个信号完全清除,然后其余 49 个信号部分清除,但泄漏了一些内存。
将插槽传递给函数以多次使用的正确方法是什么?任何帮助,将不胜感激。
谢谢,克里斯