gpt4 book ai didi

c++ - shared_ptr 在我可以正确使用它之前就被销毁了

转载 作者:太空宇宙 更新时间:2023-11-04 14:58:13 25 4
gpt4 key购买 nike

我有以下代码,它应该通过线程 A 将一个 shared_ptr 实例添加到一个侵入式链表。其他一些消费者线程稍后将通过从列表中删除它来使用它。然而,在某个时刻,我的 shared_ptr 似乎被破坏了,并且链表中对它的引用不再有效,导致断言。

有人能告诉我我做错了什么吗?我怀疑这是因为我在本地范围内创建了我的原始 shared_ptr 并且它被销毁了。虽然List应该还有引用吧??? (这不是生产代码)

编辑:

所用变量的定义:

BaseHookQueueList* lst;
typedef boost::intrusive::list<QueueList> BaseHookQueueList;
class QueueList : public boost::intrusive::list_base_hook<>


// Making my BaseHookQueueList take a shared_ptr of pointing to type QueueList conflicts // with the list_base_hook because it does not seem to like shared_ptr...
////////////////////////////////////////////////////////////////////////////////////
if (dwWait == WAIT_OBJECT_0) //Wait is successfull
{
while(count != 100)
{
//Some new request arrived
boost::shared_ptr<QueueList> Qlist (new QueueList()); //Create shared_ptr instance
int temp = 0;
if (count > 5)
{
Qlist->SetName(names[temp]); // Fill up name property of QueueList object with some nonsense...
temp++;
}
else
{
Qlist->SetName(names[count]);
}

workerfunc(lst, Qlist); // Pass to worker func
count++;
}
} // shared_ptr goes out scope and I get ASSERT error from list!!
}
}

void workerfunc(BaseHookQueueList* l, LIST item) // LIST is a typedef shared_ptr<QueueList> LIST
{
{
boost::mutex::scoped_lock workerfunclock(listlock);

l->push_front(*item); //Add to list
}

//Scope of lock
{
boost::mutex::scoped_lock workerfuncconsoleLock(consolelock);
printf("Adding item to list...\n");
}

ReleaseSemaphore(hConsumer, 1, NULL); // Set conumser Semaphore to Signalled with number of items currently on the queue
}

最佳答案

l->push_front(*item);  //Add to list 

取消引用可能是问题所在。您不是将 shr​​ed_ptr 实例传递给 l 列表,而是传递指向对象本身。如果不是这样,请发布更完整且不那么困惑的测试用例。

关于c++ - shared_ptr 在我可以正确使用它之前就被销毁了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3881678/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com